我想更改以下XML:
<command>
<node>
<e id="list1">
<node>
<e id="01"><key id="value">Value01</key></e>
<e id="02"><key id="value">Value02</key></e>
</node>
</e>
</node>
<key>
<e id="11">Value11</e>
<e id="12">Value12</e>
</key>
</command>
获取此XML:
<command>
<node id="list1">
<node id="01"><key id="value">Value01</key></node>
<node id="02"><key id="value">Value02</key></node>
</node>
<key id="11">Value11</key>
<key id="12">Value12</key>
</command>
所以有很多问题:
我尝试了几次转换失败(我是XSLT的初学者)。有没有人有这种转变的解决方案?谢谢!
答案 0 :(得分:3)
从
开始<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
然后你想为
添加一个模板<xsl:template match="*[e]">
<xsl:apply-templates/>
</xsl:template>
和一个
<xsl:template match="e">
<xsl:element name="{name(..)}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
然后是完整的样式表
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[e]">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="e">
<xsl:element name="{name(..)}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>