1

私は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> 

私はそれを次のように変えたいと思います:

<?xml version="1.0"?>
<docroot>
    <vc6>bar</vc6>
    <vc6>foo</vc6>
    <vc7>bar7</vc7>
    <vc7>foo7</vc7>
    <vc8 arch="x64">amd64demo</vc8>
</docroot> 

あれは、

  1. の子要素は要素名で並べ替える必要があるため、<vc6>は>の前にあり<vc7ます。
  2. 2つの子が同じ要素名を持っている場合、それらはテキスト値でソートする必要があるため、「bar」は「foo」の前にあります。

xslの書き方は?ありがとうございました。

4

2 に答える 2

5

レゴシアの回答の改訂:

<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>
于 2012-06-12T16:39:00.930 に答える
2

この回答xsl:sortには、使用方法の例がいくつかあります。このようなものがうまくいくはずです:

<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>
于 2012-06-12T13:50:36.997 に答える