我有一些示例XML:
<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<br />Line 2<br />Line 3
我可以看到ASP正在转换代码中的括号,但我不确定原因。有什么想法吗?
答案 0 :(得分:2)
我有一些示例XML:
<sample><![CDATA[Line 1<br />Line 2<br />Line 3<br />]]></sample>
这是一个sample
元素,其中包含文本节点子元素。
假设您应用了身份转换。然后结果将是:
<sample>Line 1<br />Line 2<br />Line 3<br /></sample>
为什么呢?由于文本节点和属性值具有特殊字符&
,<
和>
将转义为字符实体。
编辑:当然,您可以使用DOE ......但是,除了它是一个可选功能之外,结果将是一个文本节点,无论如何(没有编码字符实体)。您将需要其他解析器fase(这可能在输出和编码HTML片段到(X)HTML文档时很有用,例如在feed中,存在输出格式错误的风险......)。
此样式表:
<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 :(得分:1)
除了@Alejandro的解释,这是最好的解决方案:
永远不要将标记放在文本(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内部正在失去它。
答案 2 :(得分: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包裹起来然后随着时间的推移而欢呼经历。
<强>更新强>
好的,所以上面没有用。当然,在添加问题评论之前,不知道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" />
。
此外,对于投票,请评论原因。