我有一个包含新闻故事的XML文档,新闻故事的正文元素在纯文本中包含p标签。当我使用XSL来检索正文时,例如
<xsl:value-of select="body" />
p标签似乎被剥离了。我正在使用Visual Studio 2005的XSL实现。
有没有人有任何想法如何避免这种情况?感谢。
答案 0 :(得分:24)
尝试使用
<xsl:copy-of select="body"/>
代替。来自w3schools' documentation on same:
<xsl:copy-of>
元素会创建一个 当前节点的副本。注意:命名空间节点,子节点, 和当前节点的属性是 自动复制!
答案 1 :(得分:4)
如果您无法控制输入文档,则副本应该有效:
来自http://www.xml.com/pub/a/2000/06/07/transforming/index.html
另一方面,xsl:copy-of元素可以复制模板选择的每个节点的整个子树。如果xsl:copy-of元素的select属性具有适当的值,则包括属性。在下面的例子中,模板复制title元素节点及其所有后代节点 - 换句话说,复制完整的title元素,包括它们的标签,子元素和属性:“
<xsl:template match="title">
<xsl:copy-of select="*"/>
</xsl:template>
答案 2 :(得分:1)
如果您可以控制输入文档,CDATA是正确的方法。
答案 3 :(得分:1)
XML元素的值 - 不仅在XSLT中而且在DOM实现中都是如此 - 是其所有后代文本节点的串联。在XSLT中,value-of
发出元素的值,而copy-of
发出元素的副本。
答案 4 :(得分:-1)
这是因为引擎正在解释&lt; p&gt;标记(输出除外)。您需要使用“disable-output-escaping = yes | no”属性指定您希望内容“按原样”。
<xsl:value-of select="body" disable-output-escaping="yes"/>