对 XML 文件进行排序

Ror*_*ory 1 python xml sorting xslt xpath

是否可以对 XML 文件进行如下排序:

<model name="ford">
<driver>Bob</driver>
<driver>Alice</driver>
</model>

<model name="audi">
<driver>Carly</driver>
<driver>Dean</driver>
</model>
Run Code Online (Sandbox Code Playgroud)

哪个会变成

<model name="audi">
<driver>Carly</driver>
<driver>Dean</driver>
</model>

<model name="ford">
<driver>Alice</driver>
<driver>Bob</driver>
</model>
Run Code Online (Sandbox Code Playgroud)

也就是说,最外面的元素首先被排序,然后是第二个最外面的元素,依此类推。

它们需要首先按元素名称排序。这能做到吗?或者我应该使用像 BeautifulSoup 这样的东西来旋转我自己的?

Mic*_*Kay 5

这是 Kirill 解决方案的改进,我认为它更好地反映了所述要求,并且避免了 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>
Run Code Online (Sandbox Code Playgroud)