【发布时间】:2008-10-02 13:21:31
【问题描述】:
我有一个包含新闻故事的 XML 文档,新闻故事的正文元素在纯文本中包含 p 个标签。当我使用 XSL 检索正文时,例如
<xsl:value-of select="body" />
p 标签似乎被剥离了。我正在使用 Visual Studio 2005 的 XSL 实现。
有没有人知道如何避免这种情况?谢谢。
【问题讨论】:
我有一个包含新闻故事的 XML 文档,新闻故事的正文元素在纯文本中包含 p 个标签。当我使用 XSL 检索正文时,例如
<xsl:value-of select="body" />
p 标签似乎被剥离了。我正在使用 Visual Studio 2005 的 XSL 实现。
有没有人知道如何避免这种情况?谢谢。
【问题讨论】:
尝试使用
<xsl:copy-of select="body"/>
相反。来自w3schools' documentation on same:
<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 发出元素的副本。
【讨论】:
这是因为引擎正在解释
标签(将其排除在输出之外)。您需要使用“disable-output-escaping=yes|no”属性指定您想要的内容“原样”。
<xsl:value-of select="body" disable-output-escaping="yes"/>
【讨论】: