XSLT排序区分大小写

时间:2013-11-28 12:28:45

标签: xslt

请看例子:

XSLT:

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="xml" indent="yes"/>
      <xsl:strip-space elements="*"/> 
      <xsl:template match="*">
        <xsl:copy>
          <xsl:apply-templates>
            <xsl:sort select="name()" case-order="upper-first"/>
          </xsl:apply-templates>
        </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>

source xml:

<?xml version="1.0" encoding="UTF-8"?>
<Test>
    <Z>Z</Z>
    <a>a</a>
    <A>A</A>
    <B>B</B>
    <k>k</k>
</Test>

结果是。这是不区分大小写的顺序。如何强制大写字母是第一个?

<?xml version="1.0" encoding="UTF-8"?>
<Test>
    <A>A</A>
    <a>a</a>
    <B>B</B>
    <k>k</k>
    <Z>Z</Z>
</Test>

但是,我需要这样的东西:

<?xml version="1.0" encoding="UTF-8"?>
<Test>
    <A>A</A>
    <B>B</B>
    <Z>Z</Z>
    <a>a</a>
    <k>k</k>
</Test>

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您可能需要在单独的sort指令中按案例排序:

  <xsl:apply-templates>
    <xsl:sort select="translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', '00000000000000000000000000')" />
    <xsl:sort select="name()"/>
  </xsl:apply-templates>

此解决方案可能需要进行一些测试。