输入:
<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:E2>
中将所有子元素及其属性和子项包裹在<s:XYZ>
中。
<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>
但不是其直接子元素的输出。
答案 0 :(得分:1)
尝试:
<!-- 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>