如何保存标记标签?

时间:2020-03-06 15:01:32  来源:igfitidea点击:

我有一个包含新闻报道的XML文档,新闻报道的body元素在纯文本中包含p标签。当我使用XSL检索身体时,例如

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

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

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

解决方案

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

这是因为引擎正在解释<p>标记(输出中不包含它)。我们需要使用" disable-output-escaping = yes | no"属性指定要"按原样"显示的内容。

<xsl:value-of select="body" disable-output-escaping="yes"/>

尝试使用

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

反而。来自w3schools的相同文档:

The <xsl:copy-of> element creates a
  copy of the current node.
  
  Note: Namespace nodes, child nodes,
  and attributes of the current node are
  automatically copied as well!

如果我们无法控制输入文档,则应使用以下方法进行复制:

来自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>

XML元素的值不仅在XSLT中是正确的,而且在DOM实现中是其所有后代文本节点的串联。在XSLT中," value-of"发出元素的值,而" copy-of"发出元素的副本。