XSLT,如何按元素名称排序

Jim*_*hen 1 xml xslt

我是 XSLT 的新手。我只是提出一个问题,希望有人可以提供帮助。

假设我有一个源 xml,

<?xml version="1.0"?>
<docroot>
    <vc6>foo</vc6>
    <vc7>bar7</vc7>
    <vc8 arch="x64">amd64demo</vc8>
    <vc7>foo7</vc7>
    <vc6>bar</vc6>
</docroot> 
Run Code Online (Sandbox Code Playgroud)

我想把它变成:

<?xml version="1.0"?>
<docroot>
    <vc6>bar</vc6>
    <vc6>foo</vc6>
    <vc7>bar7</vc7>
    <vc7>foo7</vc7>
    <vc8 arch="x64">amd64demo</vc8>
</docroot> 
Run Code Online (Sandbox Code Playgroud)

那是,

  1. 的子元素应按元素名称排序,因此<vc6>位于> 之前<vc7
  2. 如果两个子元素具有相同的元素名称,则应按其文本值对它们进行排序,因此 'bar' 位于 'foo' 之前。

怎么写xsl?谢谢你。

Mic*_*Kay 5

修订legoscia的回答:

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*"/>
    <xsl:apply-templates select="node()">
      <xsl:sort select="name()" />
      <xsl:sort select="." />
    </xsl:apply-templates>
  </xsl:copy>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)