我发现有关使用XSLT进行嵌套/递归排序的多个问题和答案,但无法根据我的情况进行映射。
我的情况:
XML看起来像:
<set key="...">
<property key="..."/>
<property key="..."/>
<property key="..."/>
<set key="...">
<set key="...>
<property key="..."/>
<property key="..."/>
<property key="..."/>
</set>
</set>
</set>
建议?
答案 0 :(得分:2)
在简单的情况下,可以这样实现:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()">
<xsl:sort select="@key" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于此XML:
<set key="1">
<property key="6"/>
<property key="8"/>
<property key="1"/>
<set key="3">
<set key="0">
<property key="4"/>
<property key="2"/>
<property key="9"/>
</set>
</set>
</set>
结果将是:
<set key="1">
<property key="1"></property>
<set key="3">
<set key="0">
<property key="2"></property>
<property key="4"></property>
<property key="9"></property>
</set>
</set>
<property key="6"></property>
<property key="8"></property>
</set>
我认为现实应用程序更复杂,但您的示例并未显示。
答案 1 :(得分:-2)
就个人而言,我不认为XSL-T适合这类事情。它是一种XML转换语言,而不是用于排序的编程语言。
我认为最好使用正确的工具:使用Java或C#等语言以排序的形式生成XML,然后使用XSL-T对其进行转换。
如果你正在努力,你可能应该重新考虑这种方法。