我想知道這個謂詞([1])是如何硬編碼爲1總是在 muenchian分組。
這是簡單:
的key()
函數生成的所有節點對於給定組,我們希望從任何團體舉一個節點。
不保證所有的組都會有兩個或更多的節點 - 有些節點可能只有一個節點。
這就是爲什麼從每個組中取出第一個(也可能是唯一的)節點是安全和方便的。
我們同樣可以做分組採取最後節點從每組(但這將是低效率):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kNumByMod3" match="num"
use=". mod 3"/>
<xsl:template match=
"num[generate-id()
=
generate-id(key('kNumByMod3', . mod 3)[last()])
]
">
3k + <xsl:value-of select=". mod 3"/>:
<xsl:text/>
<xsl:copy-of select="key('kNumByMod3', . mod 3)"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
當這個XML文檔施加:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
產生想要的,正確分組的結果:
3k + 2:
<num>02</num>
<num>05</num>
<num>08</num>
3k + 0:
<num>03</num>
<num>06</num>
<num>09</num>
3k + 1:
<num>01</num>
<num>04</num>
<num>07</num>
<num>10</num>
完美。另外通過一些實驗發現,下面三個做分組1)contact [count(。| key('contacts-by-surname',surname)[1])= 1]「> 2)contact [count(。| key ('contacts-by-surname',surname)[2])= 1]「> 3)contact [count(。| key('contacts-by-surname',surname'[last()])= 1]」 > – Suresh
是的,謂詞是測試兩個節點是否相同(同一個節點),也可以用'generate-id()'來完成,XPath 2.0用'is'運算符表示 –
@ user1004770:如果您對此主題感興趣,請查看此答案:http://stackoverflow.com/questions/133092/how-do-you-identify-duplicate-elements-in-an-xpath-2 -0-sequence –