天天看點

Xml SelectNodes 與 XPath

        xpath 是 xml 的内容,這裡 selectnodes 是 c# 中 xmldocument 或 xmlnode 的一個方法。selectnodes 使用 xpath 來選取節點。

重要文法:

selectnodes("item")

        從目前節點的兒子節點(僅限兒子,不包含孫子、重孫噢)中選擇名稱為 item 的節點。

selectnodes("/item")

        從根節點的兒子節點中選擇名稱為 item 的節點。

selectnodes("//item")

        從任意位置的節點上選擇名稱為 item 的節點。要重點突出這個任意位置,它不受目前節點的影響,也就是說假如目前節點是在第 100 層(有點誇張),也可以選擇第一層的名稱為 item 的節點。

selectnodes(".")

        選擇目前節點。

selectnodes("..")

        選擇目前節點的父節點。

selectnodes("//item[@name]")

        在 selectnodes("//item") 的基礎上,增加了一個限制,就是要求擁有 name 屬性。

selectnodes("//item[@name='111']")

        在 selectnodes("//item[@name]") 的基礎上,增加了一個限制,就是要求 name 屬性值為 111。注意文法中有引号;如果沒有引号,則表示是數字類型,對于數字類型可以使用大于号、小于号等,比如:selectnodes("//item[@v>333]")。

selectnodes("//item[1]")

        選擇第一個 item,注意是第一個,不是第二個。還有這裡是指親兄弟間的第一個 item,也就是說:父級若有三個 item,則選擇第一個;若父級第二個 item 的有兩個名稱同樣為 item 的兒子,則第一個兒子會被選擇出來;若父級第三個 item 的也有兩個名稱同樣為 item 的兒子,則第一個兒子也會被選擇出來…… 

selectnodes("//item[last()-1]")

        倒數第二個節點,同樣是指親兄弟間的倒數第二個。

selectnodes("//item[position()<=2]")

        位置為第一和第二的節點(第一個節點的 position() 為 1),同樣是指親兄弟間的位置。

selectnodes("//@name")

        selectnodes("/root/item/@name") 取 item 的 name 屬性

        選擇 name 屬性,注意這下選擇的是屬性,而不是節點了。用 value 屬性擷取屬性集合的屬性值。

selectnodes("/root/item")

        根節點 root 下的 item 兒子節點。

selectnodes("/root//item")

        根節點 root 下的不管是兒子、孫子、重孫子……,隻要是名稱為 item 的統統選取出來。

通配符:

        可用 * 表示任意節點名稱,比如 selectnodes("/channel/*/item");

        用 @* 表示任意屬性;

        用 node() 表示任意類型的節點;

        用 text() 表示文本類型的節點,實際上也就是表示取文本節點(元素節點下面是文本節點,文本節點下面才是文字)。

運算符:

        | 表示或。selectnodes("//item|//channel"),選擇 item 或 channel 節點。