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

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

How can I make an exact copy of a xml node's children with XSLT?

我的问题是我的 XML 文档中包含 XHTML Fragments,在通过 XSLT 传递它时,我希望它能够呈现这些Fragments而不破坏它们。

我尝试将Fragmentspackage在 CDATA 中,但它不起作用,因为小于和大于被转换为而不是直接回显。

执行此操作所需的 XSL 是什么?


1
2
3
4
5
xsl:template match="@*|node()"
  xsl:copy
    xsl:apply-templates select="@*|node()"/
  /xsl:copy
/xsl:template

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


我遇到了这个问题,副本当然是最容易使用的。身份有效,但那是 5 行代码,您需要调用这样的模板,而不仅仅是在 XSLT 文档中定义它(否则您可能不会在输出中得到预期的结果.)

我的主要问题实际上是复制标签的内容,而不是标签本身。它实际上很容易解决,但我花了一点时间才弄清楚(可能是因为 QtXmlPatterns 崩溃了很多!)

因此,以下复制了此处命名的标签及其所有子标签:

1
xsl:copy-of select="this/tag/here"/

但通常你不想这样做,因为这里实际上是容器,换句话说,它不应该出现在输出中。在这种情况下,您可以简单地这样做:

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

这会复制在此处命名的标记中找到的所有子项。


假设您的 xhtml 位于 YYY 元素中

http://www.dpawson.co.uk/xsl/sect2/N1930.html 解释选项


xsl:副本


推荐阅读