我正在编写一个转换并且为了更容易区分结果,我需要在多个字段上对输出进行排序。我找不到任何文件讨论如何做到这一点,重要的是我做对了。
这是正确的方法吗?
<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>
答案 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>