-1

次のようなxmlファイルがあります

<tests>
     <test>
       <categoryname>A</categoryname>
       <region>EU</region>
     </test>

     <test>
       <categoryname>B</categoryname>
       <region>EU</region>
     </test>

     <test>
       <categoryname>C</categoryname>
       <region>USA</region>
     </test>
     <test>
       <categoryname>C</categoryname>
       <region>EU</region>
     </test>
</tests>

アルファベット順にソートされ、次のように表示されます。

A
B
C

しかし、次のようなカスタムソートでそれを見たいと思います:

C
A
B

同様の質問を見て、与えられた回答 (xsl コード) を適用しましたが、残念ながら役に立ちませんでした。追加の属性/タグ/値などを追加できます.

4

1 に答える 1

1

これはどうですか:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="/*">
    <xsl:copy>
      <xsl:apply-templates select="test">
        <xsl:sort select="string-length(substring-before('|C|A|B|', 
                                                         concat('|', categoryname, '|')
                                                        ))"
                  data-type="number"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

サンプル入力に適用すると、結果は次のようになります。

<tests>
  <test>
    <categoryname>C</categoryname>
    <region>USA</region>
  </test>
  <test>
    <categoryname>C</categoryname>
    <region>EU</region>
  </test>
  <test>
    <categoryname>A</categoryname>
    <region>EU</region>
  </test>
  <test>
    <categoryname>B</categoryname>
    <region>EU</region>
  </test>
</tests>
于 2013-03-20T15:54:42.907 に答える