2010-11-30 51 views
2
括号

我有一些示例XML:HTML被转换与<和>

<sample><![CDATA[Line 1<br />Line 2<br />Line 3<br />]]></sample> 

我使用ASP以输出使用样式表像所以这个XML:

Set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP") 
xmlHttp.open "GET", URLxml, false 
xmlHttp.send() 

Set xslHttp = Server.CreateObject("Microsoft.XMLHTTP") 
xslHttp.open "GET", xXsl, false 
xslHttp.send() 

Set xmlDoc = Server.CreateObject("MICROSOFT.XMLDOM") 
Set xslDoc = Server.CreateObject("MICROSOFT.XMLDOM") 
xmlDoc.async = false 
xslDoc.async = false 
xmlDoc.Load xmlHttp.responseXML 
xslDoc.Load xslHttp.responseXML 

Response.Write xmlDoc.transformNode(xslDoc) 

然而,一旦写入,HTML输出显示为:

Line 1&lt;br /&gt;Line 2&lt;br /&gt;Line 3 

我可以看到t帽子ASP正在转换代码中的括号,但我不知道为什么。有什么想法吗?

+0

好问题,+1。除了@Alejandro的解释之外,请参阅我的回答,描述解决问题的最佳解决方案。 – 2010-11-30 14:28:50

+0

+1问题很明确,并寻求一个明确的答案 - 指出,张贴XSL文件将有所帮助。 – orangepips 2010-11-30 14:40:46

+0

输出此数据的XSL部分是简单的。 – 2010-11-30 16:17:26

回答

2

我有一些示例XML:

<sample><![CDATA[Line 1<br />Line 2<br />Line 3<br />]]></sample> 

这是一个sample元素与文本节点孩子。

假设您应用了标识转换。那么结果将是:

<sample>Line 1&lt;br /&gt;Line 2&lt;br /&gt;Line 3&lt;br /&gt;</sample> 

为什么?由于文本节点和属性值具有特殊字符&,<>作为字符实体转义。

编辑:当然,你可以使用DOE ......但是,除此之外,它是一个可选功能,其结果将是一个文本节点不管什么(不编码字符实体)。您将需要其他解析器fase(这可能会在将HTML片段输出并编码到(X)HTML文档(如提要中)时很有用,但输出格式不正确...)。

该样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="sample"> 
     <p> 
      <xsl:value-of select="." disable-output-escaping="yes"/> 
     </p> 
    </xsl:template> 
</xsl:stylesheet> 

输出:

<p>Line 1<br />Line 2<br />Line 3<br /></p> 

渲染为(实际的标记):

行1
线路2
行3

1

除了@亚历杭德罗的解释,她e是最好的解决方案:

切勿将标记置于文本(CDATA)节点中。

相反的:

<sample><![CDATA[Line 1<br />Line 2<br />Line 3<br />]]></sample> 

始终创建:

<sample>Line 1<br />Line 2<br />Line 3<br /></sample> 

记住:把标记CDATA内正在失去它。

1

认为这是导致您问题的XSL转换。您应该能够编辑您的.xsl文件来纠正这个如此:

<xsl:template match="."> 
    <xsl:value-of select="." disable-output-escaping="yes" /> 
    <!-- ... other XSL business here ... --> 
</xsl:template> 

我从this page about disable output escaping偷窃。

为了记录我讨厌XML/XSL - 寻找问题的解决方案。一般来说,如果您需要处理标记,我发现XML/XSL仅引入问题,因为经常需要处理标记片段(通常不是有效的XML),因此您将CDATA包裹在其周围,然后随着您经历。

更新

OK,所以上面没有工作。当然不知道XSL是什么样的,直到问题发表评论为止。以下不工作(想法来自this forum thread):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:template match="."> 
     <xsl:value-of select="sample" /> 
    </xsl:template> 
</xsl:stylesheet> 

主要是<xsl:output method="text" />

另外,为了投票,评论为什么。

相关问题