18

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

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

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

有谁知道如何避免这种情况?谢谢。

4

5 回答 5

25

尝试使用

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

反而。来自w3schools 的相同文档

<xsl:copy-of>元素创建当前节点的副本。

注意:命名空间节点、子节点和当前节点的属性也会自动复制!

于 2008-10-02T13:27:31.253 回答
5

如果您无法控制输入文档,则副本应该可以工作:

来自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>
于 2008-10-02T13:30:59.043 回答
1

如果您可以控制输入文档,那么CDATA是正确的选择。

于 2008-10-02T13:25:56.513 回答
1

XML 元素的值——不仅在 XSLT 中而且在 DOM 实现中都是如此——是其所有后代文本节点的连接。在 XSLT 中,value-of发出元素的值,同时copy-of发出元素的副本。

于 2008-10-02T19:37:02.067 回答
-1

这是因为引擎正在解释 <p> 标记(将其排除在输出之外)。您需要使用“disable-output-escaping=yes|no”属性指定您想要的内容“原样”。

<xsl:value-of select="body" disable-output-escaping="yes"/>
于 2008-10-02T13:26:00.897 回答