2009-08-13 71 views
0

返回結果我有一個這樣的XML文檔:選擇的XPath相同的屬性,並沒有重複

<wii> 
    <game> 
    <type genre="arcade" /> 
    <type genre="sport" /> 
    </game> 
    <game> 
    <type genre="platform" /> 
    <type genre="arcade" /> 
    </game> 
</wii> 

如何列出所有流派,而無需使用僅XPath的重複?

謝謝。

+0

我可以提供解決方案,但它也包含XSLT – Dewfy 2009-08-13 11:24:58

+0

Tomalak的答案應該給你你想要的。據推測,第二個遊戲元素由於複製/粘貼錯誤而缺少結束標記? – 2009-08-13 11:48:38

+0

現在修復,謝謝。 – 2009-08-13 12:03:59

回答

5
 
/wii/game/type/@genre[not(. = preceding::type/@genre)] 

在普通的英語此選擇用於其中不存在已等值@genre節點在文檔的前述部分的任何@genre屬性節點。

的平等=運營商,給定一個普通值和節點集時,它的普通值的每個節點在節點集比較,返回true只有當所有節點匹配(注意,!=不這樣做,它只與該集合的第一個節點相比!)。結果必須用not()否定。

0

您是否嘗試了distinct-values()函數?

distinct-values(//type/@genre) 

如果該函數不適用於您,顯然沒有用處。

Here's a link轉換爲僅使用XPath的方法。

+0

謝謝,但它不可用。 – 2009-08-13 12:07:22