是否可以像下面这样对 XML 文件进行排序:
<model name="ford">
<driver>Bob</driver>
<driver>Alice</driver>
</model>
<model name="audi">
<driver>Carly</driver>
<driver>Dean</driver>
</model>
会变成
<model name="audi">
<driver>Carly</driver>
<driver>Dean</driver>
</model>
<model name="ford">
<driver>Alice</driver>
<driver>Bob</driver>
</model>
也就是说,最外层的元素先排序,然后是第二外层的,依此类推。
它们需要先按元素名称排序。
请您参考如下方法:
这是对 Kirill 解决方案的改进,我认为它更好地反射(reflect)了规定的要求,并且它避免了 XSLT 2.0 在排序键包含多个值时会给您的类型错误(但它仍然适用于 1.0)。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="*">
<xsl:sort select="(@name | text())[1]"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
