2016-01-22 105 views
3

我想不通的區別:XPath中// * /和/ * //之間的區別?

/RootNode//*/@* (1) 

/RootNode/*//@* (2) 

可能(1)說:「從RootNode開始深入,你可以直到你找到任何屬性的所有葉子打印和然後打印它「並且 (2)說」從RootNode開始,取所有元素(只有RootNode的孩子),然後儘可能地深入,直到找到具有要打印的屬性的葉子爲止「。我錯了嗎? (1)(2)之間的區別是什麼?

+0

是什麼讓你覺得有區別?例如,你有什麼能與一個而不是另一個協同工作? – AakashM

+0

在我看來沒有。他們應該顯示相同的結果。但是我寫了'(1)'的解決方案,我的教授在上面寫了一個大紅色的「X」,並寫了'(2)'。我不懂爲什麼。如果它們相同,那麼如果一個是正確的,另一個也是。 – bogALT

回答

1

它們都是等價的。他們都表示,

Select all of the attributes on elements beneath the top RootNode element.

無論*之前或之後的後代或自身一步不要緊出現。

+0

感謝您的編輯,但我認爲'/ RootNode/* // data/@ *'應該保留'/ RootNode/* // data(@ *)',因爲'data'不是路徑的一部分,而是一個打印的函數屬性值。對? – bogALT

+0

我被要求顯示文檔中的所有屬性,如果我輸入'/ RootNode/* // data(@ *)'它可以工作,如果我嘗試'/ RootNode/* // @ *'則不能。錯誤:*沒有systemId *的模塊的第1行錯誤: XPTY0004:無法創建父級爲文檔節點的屬性節點(名稱) 無法創建父級爲文檔節點的屬性節點(名稱) – bogALT

+0

' // @ *'將選擇文檔中的所有屬性值;你不需要'data()',但是如果這不是你的意圖,我會刪除'data'作爲一個元素。 – kjhughes