使用xsl:sort进行多字段排序

时间:2014-06-17 13:08:11

标签: xml sorting xslt

我正在编写一个转换并且为了更容易区分结果,我需要在多个字段上对输出进行排序。我找不到任何文件讨论如何做到这一点,重要的是我做对了。

这是正确的方法吗?

<xsl:apply-templates select="MemoryBank | ParameterSet | Template">
    <xsl:sort select="local-name()"/>
    <xsl:sort select="attribute::Id"/>
</xsl:apply-templates>

示例XML看起来与此类似。

<?xml version="1.0" encoding="utf-8"?>
<FirmwareConfiguration>
    <MemoryBank Id="EEPROM" Address="0" Size="262144" BitsPerWord="8">
      <Description>2 Mbit EEPROM</Description>
    </MemoryBank>
    <MemoryBank Id="PRAM" Address="12288" Size="53248" BitsPerWord="32">
      <Description>Program Memory</Description>
    </MemoryBank>
    <ParameterSet Id="GainReduction" Size="16" BitsPerWord="24">
      <Description>Gain Reduction Values</Description>
    </ParameterSet>
    <ParameterSet Id="AlgorithmState" Size="35" BitsPerWord="24">
      <Description>Firmware Variable Space</Description>
    </ParameterSet>
    <Template Id="05b4bcb0-2d04-4742-9fdd-bd60496502a9">
      <FormatSpecifier>
        <SignBits>0</SignBits>
        <IntegerBits>5</IntegerBits>
        <FractionalBits>0</FractionalBits>
      </FormatSpecifier>
    </Template>
    <Template Id="0667ae14-3b5a-4b38-8c35-d575add6df65">
      <FormatSpecifier>
        <SignBits>0</SignBits>
        <IntegerBits>1</IntegerBits>
        <FractionalBits>0</FractionalBits>
      </FormatSpecifier>
    </Template>
</FirmwareConfiguration>

1 个答案:

答案 0 :(得分:0)

  

这是正确的方法吗?

XSLT 1.0 spec只是声明&#34;第一个xsl:sort子指定主要排序键,第二个xsl:sort子指定次要排序键,依此类推&#34;没有详细说明&#34;主要排序键&#34;和&#34;二级排序键&#34;的意思。

XSLT 2.0规范spells out the whole process in detail并明确指出排序首先基于第一个<xsl:sort>,第二个仅针对第一个具有相同值的项目进行检查,等等。 / p>