我正在尝试使用XSLT转换XML文档,以便使用关键字按字母顺序排列"entry"元素。
我的XML示例如下:
<Custom name="Custom Name1">
<Attributes>
<Map>
<entry key="entry4">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String13</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
<entry key="entry1">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String6</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
<entry key="entry2">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String5</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
<entry key="entry3">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String2</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
</Map>
</Attributes>
</Custom>
因此,我正在努力实现以下结果:
<Custom name="Custom Name1">
<Attributes>
<Map>
<entry key="entry1">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String6</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
<entry key="entry2">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String5</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
<entry key="entry3">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String2</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
<entry key="entry4">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String13</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
</Map>
</Attributes>
</Custom>
我尝试使用以下XSLT来转换我的XML文档:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Custom/Attributes/Map">
<xsl:apply-templates>
<xsl:sort select="@key" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
它正在按照我的意愿对元素进行排序,但随后似乎删除了map元素,给了我以下内容的输出:
<Custom name="Custom Name1">
<Attributes>
<entry key="entry1">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String6</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
<entry key="entry2">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String5</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
<entry key="entry3">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String2</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
<entry key="entry4">
<value>
<Map>
<entry key="Active" value="true"/>
<entry key="Entitlements">
<value>
<List>
<String>String13</String>
</List>
</value>
</entry>
<entry key="Refresh" value="true"/>
</Map>
</value>
</entry>
</Attributes>
</Custom>
知道我在这里做错了什么吗?
非常感谢,Connor
您匹配了Map
,但没有复制或创建新的映射元素。只需添加xsl:copy,就可以开始了。。。
<xsl:template match="/Custom/Attributes/Map">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="@key" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
Fiddle:http://xsltfiddle.liberty-development.net/pNvtBHw