-1

我有一个像

<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 回答