2014-06-17 47 views
0

我正在編寫一個轉換,爲了更容易區分結果,我需要對多個字段的輸出進行排序。我找不到任何文件討論如何做到這一點,重要的是我做對了。使用xsl進行多字段排序:排序

這是正確的方法嗎?

<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

這是這樣做的正確方法?

是的。

XSLT 1.0 spec只是簡單地聲明「第一個xsl:sort子級指定了主要排序鍵,第二個xsl:sort子級指定了第二個排序鍵等等」而沒有詳細地說明「主要排序鍵」和「二級排序鍵「的意思。

XSLT 2.0規範spells out the whole process in detail和清楚地表明,排序首先基於第一<xsl:sort>,第二隻用於與用於第一相同值的項目檢查等