2011-04-06 28 views
2

我剛開始學習XPath,我正在學習沒有縮寫的語言。有關根節點的簡單XPath問題

當一個位置路徑字符「/」初始上下文節點力量是根節點......從本書

示例XML開始:

<widget type="gadget"> 
    ... 
</widget> 

如果我應該寫XPath所以我得到的類型屬性爲什麼我必須寫:

/孩子::小工具/屬性::類型

而不是這個/屬性::類型

我誤解了一些關於根節點或?因爲我想「/」和widget是一樣的......

謝謝

+0

好問題,+1。查看我的答案以獲得完整的解釋。 – 2011-04-06 19:30:26

回答

5

http://www.w3.org/TR/xpath/#attribute-nodes

每一個元素節點都有一個相關的 組屬性節點;該元素是 這些屬性中的每一個的父節點 節點;但是,屬性節點不是其父元素的子元素,它是 。

只有元素節點具有屬性。

根節點不是一個元素。 From http://www.w3.org/TR/xpath/#root-node

根節點是樹的根。 根節點不會發生,除非 樹的根。文檔元素的元素節點 是根節點的子節點 。根節點還有 作爲子處理指令, 註釋節點用於處理 指令和註釋,在序言中出現 ,並在 文檔元素結束後出現。

因此,在/@*/attribute::*

問你無法選擇喜歡的根節點的屬性:

我有沒有誤解的一些關於 根節點或?

是的。你不應該混淆文檔元素根節點(抽象)(有時也稱爲元根)

+0

@Alejandro謝謝 – LuckyLuke 2011-04-06 19:31:57

+0

@Andreas:不客氣。 – 2011-04-06 19:36:09

2

如果我應該寫的XPath所以 我得到的類型屬性爲什麼我有 寫:

/child::widget/attribute::type 

,而不是像這樣

/attribute::type 

中的XPath EXP ression

/attribute::type 

裝置

選擇XML文檔的根節點的type屬性。

但是,根節點沒有屬性(按照W3C Spec),因此,上述XPath表達式不會選擇任何內容。

你想

/widget/@type 

這意味着

選擇最上面的元素(名爲widget)的XML文檔type屬性。

我誤解了一些關於 的根節點或?因爲我想 「/」和widget是一樣的......

永遠記住,根節點/不是元素。根據W3C XPath Spec

+0

謝謝你,親愛的 – LuckyLuke 2011-04-06 19:32:40

+0

@Andreas,不客氣。 – 2011-04-06 19:38:09