如何保留标记标记?

时间:2008-10-02 13:21:32

标签: xml xslt

我有一个包含新闻故事的XML文档,新闻故事的正文元素在纯文本中包含p标签。当我使用XSL来检索正文时,例如

<xsl:value-of select="body" />

p标签似乎被剥离了。我正在使用Visual Studio 2005的XSL实现。

有没有人有任何想法如何避免这种情况?感谢。

5 个答案:

答案 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"/>