2015-05-27 59 views
1

因此,假設我有這樣的,在一些節點有一個名爲「的ID號」部分有一個叫「SERIALNUMBER」的元素和一些數據:XSL按多個屬性排序?

<data> 
    <product> 
     <name> Chair </name> 
     <idNumber> 12 </idNumber> 
    </product> 

    <product> 
     <name> Table </name> 
     <idNumber> 16 </idNumber> 
    </product> 

    <product> 
     <name> Lamp </name> 
     <serialNumber> 13 </serialNumber> 
    </product> 

    <product> 
     <name> Fan </name> 
     <idNumber> 10 </idNumber> 
    </product> 

    <product> 
     <name> Desk </name> 
     <serialNumber> 15 </serialNumber> 
    </product> 
</data> 

我需要他們的數量對它們進行排序,無論是是idNumber或serialNumber;因此結果將是:

範 - 10

椅 - 12

燈-13

臺-15

表 - 16

我嘗試使用:

<xsl:sort select="idNumber"/> 
<xsl:sort select="serialNumber"/> 

然而,這不起作用,因爲它會嘗試按第一個排序,即使它沒有該元素。我需要一種排序方式,既考慮到了問題,又選擇了正確的方法並正確地對它們進行了排序。這甚至有可能嗎?

回答

0

您可以使用以下xsl:sort指令:

<xsl:sort select="concat(normalize-space(idNumber),normalize-space(serialNumber))" data-type="number"/> 
0

使用此:

<xsl:sort select="idNumber | serialNumber"/> 
+0

謝謝。發現我的問題與我原先想象的有點不同。基本上每個節點都有「idNumber」和「serialNumber」,但有時一個是空的(空白)。理想情況下,我可以說,「如果idNumber不是按idNumber排序,ELSE按serialNumber排序」。希望這是有道理的。無論如何,似乎你不能使用條件,所以我不知道該怎麼做。 – Arcturus

+0

@Arcturus,你可以提供一個例子,當這個'xsl:sort'產生不需要的結果嗎? –

+1

是的問題是「」是,如果「idNumber」是空白的,而不是使用「serialNumber」,它只是將該項目放在列表的開頭,因爲空白位於其他位置之前。 – Arcturus