目標XSL唯一值密鑰
(XSLT 1.0)。我的目標是獲取一組元素S並生成另一個集合T,其中T包含S中的獨特元素並儘可能高效地完成此操作。 (注意:我不必創建一個包含該集合的變量,或者類似的東西,我只需要循環遍歷唯一的元素)。
例輸入和關鍵
<!-- My actual input consists of a bunch of <Result> elements -->
<AllMyResults>
<Result>
<someElement>value</state>
<otherElement>value 2</state>
<subject>Get unique subjects!</state>
</Result>
</AllMyResults>
<xsl:key name="SubjectKey" match="AllMyResults/Result" use="subject"/>
我覺得上面的作品,但是當我去使用我的鑰匙,這是令人難以置信的慢。以下是我如何使用我的密鑰的代碼。
<xsl:for-each select="Result[count(. | key('SubjectKey', subject)[1]) = 1]">
<xsl:sort select="subject" />
<!-- Do something with the unique subject value -->
<xsl:value-of select="subject" />
</xsl:for-each>
附加信息
我相信我這樣做不對,因爲它大大減慢我的XSL。作爲一些額外的信息,上面顯示的代碼位於與我的主XSL文件不同的XSL文件中。在主XSL中,我調用了一個模板,其中包含上面顯示的xsl:key和for-each。此模板的輸入是一個包含我的節點集的xsl:param(類似於上面顯示的示例輸入)。
好問題,+1。查看我的答案以獲得推薦的解決方案 – 2011-03-16 14:36:09
性能應該根據一些參考來衡量,在這種情況下不存在。它比什麼慢?它比沒有執行區分的樣式錶慢嗎? – 2011-03-16 17:38:34