1. 程式人生 > >XSLT對結果的分組(包括1.0和2.0新的功能)

XSLT對結果的分組(包括1.0和2.0新的功能)

設定兩個key值,一個名字為nodeA,一個為nodeB。他們分別都是對於node這個節點進行分組設定的,只是分組所使用的內容不同,nodeA使用的是node的a屬性,nodeB使用的是b屬性。
generate-id(node-set):
The generate-id function returns a string that uniquely identifies the node in the argument node-set that is first in document order. 
該函式會返回節點在整個文件中的唯一標識。
node-set key(string, object)
第一個引數是key名字,就是前面定義的<xsl:key的名字,object表示那個內容和key中的內容進行匹配,key('nodeA',@a)就是返回了第一個和當前節點的匹配內容相同的文件中的節點。
在上述的xsl中,我們新增進這樣一段
<xsl:for-each select="./node">
 <xsl:value
-of select="generate-id(.)"/>&#160;
 <xsl:value-of select="generate-id(key('nodeA',@a))"/>
 <br/>
</xsl:for-each>
可以看到輸出值是
IDAWHIYF  IDAWHIYF
IDAZHIYF  IDAZHIYF
IDA2HIYF  IDAZHIYF
IDATGIYF  IDATGIYF
可以看到空格前的四個資料是完全不相同的,也就是每一個節點的唯一標示,使隨機生成並沒有固定值,但空格後的資料第二個和第三個是相同的。我們可以看一下xml資料的第二個和第三個節點:
<node a="a2" b="b1"/>
<node a="a2" b="b2"/>
他們的a屬性是相同,所以說明key('nodeA',@a)在處理到第三個節點<node a="a2" b="b2"/>時返回的是符合key的第一個節點,也就是<node a="a2" b="b1"/>。
通過這種"./node[generate-id(.)=generate-id(key('nodeA',@a))]"方式就剔除重複的內容,達到了分組效果,解析結果就是:
The a: a1  a2  a3  
The b: b1  b2