我尝试了几种不同的方法将所有子节点传输到祖父节点,模式匹配仅发生在一个子节点上,但不是递归的。感谢这里的任何帮助。
<grandparent1>
<parent1>
<child1>1</child1>
<child2>2</child2>
</parent2>
</grandparent1>
应该成为
<grandparent1>
<child1>1</child1>
<child2>2</child2>
</grandparent1>
子节点的大小各不相同。 感谢这里的任何帮助
答案 0 :(得分:0)
使用XSLT的递归processing model非常容易。
首先,使用 identity transform 模板以的形式递归复制所有。然后为父节点添加一个例外,让它们继续递归而不复制它们。
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="parent1 | parent2">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
要为任何父级(即第二级)节点制作此通用名称,而不事先知道其名称,您可以使用:
<xsl:template match="/*/*">
<xsl:apply-templates/>
</xsl:template>
作为第二个模板。