如何使用XSLT制作XML节点的精确副本?

3

我的问题是,我的XML文档中包含XHTML片段,在通过XSLT时,我希望它可以呈现这些片段而不会破坏它们。

我尝试将片段用CDATA包装起来,但它不起作用,因为小于号和大于号被转换为<和>而不是直接回显。

需要哪种XSL才能实现这一点?

4个回答

7
<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

这在XSLT规范中被称为“身份转换”。

2
我遇到了这个问题,使用copy-of是最容易的方法。虽然identity也可以解决问题,但需要5行代码,并且您需要调用此模板,而不仅仅是在XSLT文档中定义它(否则您可能无法得到预期的输出)。
我的主要问题实际上是复制标签的内容,而不是标签本身。实际上很容易解决,但我花了一些时间才想出来(可能是因为QtXmlPatterns经常崩溃!)
因此,以下内容将复制名为“here”的标签及其所有子元素:
<xsl:copy-of select="this/tag/here"/>

但通常情况下,您不希望这样做,因为 <here> 实际上是容器,换句话说,它不应出现在输出中。在这种情况下,您可以简单地执行以下操作:

<xsl:copy-of select="this/tag/here/*"/>

这将复制在名为<here>的标签中找到的所有子元素。

1

0

xsl:copy-of


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接