输入:
<s:E1 ...>
<s:E2 ...>
<s:Child1 ...>
<s:EChild1 ...>
...
</s:EChild1 ...>
</s:Child1 ...>
</s:E2>
</s:E1 ...>
所需输出为:
<s:E1 ...>
<s:E2 ...>
<s:XYZ>
<s:Child1 ...>
<s:EChild1 ...>
...
</s:EChild1 ...>
</s:Child1 ...>
</s:XYZ>
</s:E2>
</s:E1 ...>
I。E、 我想用<s:XYZ>
中<s:E2>
的属性和子元素包装所有子元素。
我想到的XSLT是:
<xsl:stylesheet version="2.0" ...>
<xsl:output indent="yes"/>
<xsl:template match="//*:E2">
<s:XYZ>
<xsl:apply-templates/>
</s:XYZ>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这有效地生成了一个输出,其中<s:XYZ>
变成<s:E2>
,但不是它的直接子元素。
尝试:
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*:E2">
<xsl:copy>
<XYZ>
<xsl:apply-templates select="@*|node()"/>
</XYZ>
</xsl:copy>
</xsl:template>