我有一个包含新闻故事的 XML 文档,并且新闻故事的正文元素在纯文本中包含 p 标记。当我使用 XSL 检索正文时,例如
<xsl:value-of select="body" />
p 标签似乎被剥离了。我正在使用 Visual Studio 2005 的 XSL 实现。
有谁知道如何避免这种情况?谢谢。
尝试使用
<xsl:copy-of select="body"/>
反而。来自w3schools 的相同文档:
该
<xsl:copy-of>
元素创建当前节点的副本。注意:命名空间节点、子节点和当前节点的属性也会自动复制!
如果您无法控制输入文档,则副本应该可以工作:
来自http://www.xml.com/pub/a/2000/06/07/transforming/index.html
“另一方面,xsl:copy-of 元素可以复制模板选择的每个节点的整个子树。这包括属性,如果 xsl:copy-of 元素的 select 属性具有适当的值。在以下示例中,模板复制标题元素节点及其所有后代节点——换句话说,完整的标题元素,包括它们的标签、子元素和属性:"
<xsl:template match="title">
<xsl:copy-of select="*"/>
</xsl:template>
如果您可以控制输入文档,那么CDATA是正确的选择。
XML 元素的值——不仅在 XSLT 中而且在 DOM 实现中都是如此——是其所有后代文本节点的连接。在 XSLT 中,value-of
发出元素的值,同时copy-of
发出元素的副本。
这是因为引擎正在解释 <p> 标记(将其排除在输出之外)。您需要使用“disable-output-escaping=yes|no”属性指定您想要的内容“原样”。
<xsl:value-of select="body" disable-output-escaping="yes"/>