使用xpath操作xml 一 入門知識

2021-05-22 18:43:13 字數 2753 閱讀 9485

基本的xpath語法類似於在乙個檔案系統中定位檔案 

1 如果路徑以斜線 / 開始, 那麼該路徑就表示到乙個元素的絕對路徑。 

2 如果路徑以雙斜線 // 開頭, 則表示選擇文件中所有滿足雙斜線//之後規則的元素(無論層級關係) 

3 星號 * 表示選擇所有由星號之前的路徑所定位的元素 

4 方塊號裡的表示式可以進一步的指定元素, 其中數字表示元素在選擇集裡的位置, 而last()函式則表示選擇集中的最後乙個元素 

5 屬性通過字首 @ 來指定 

6 屬性的值可以被用來作為選擇的準則, normalize-space函式刪除了前部和尾部的空格, 並且把連續的空格串替換為乙個單一的空格 

7 count()函式可以計數所選元素的個數 

8 name()函式返回元素的名稱, start-with()函式在該函式的第乙個引數字串是以第二個引數字元開始的情況返回true, contains()函式當其第乙個字串引數包含有第二個字串引數時返回true 

8 string-length函式返回字串的字元數,你應該用《替代<, 用》代替》 

9 多個路徑可以用分隔符 | 合併在一起 

10 descendant (後代)軸包含上下文節點的後代,乙個後代是指子節點或者子節點的子節點等等, 因此descendant軸不會包含屬性和命名空間節點 

11 div運算子做浮點除法運算, mod運算子做求餘運算, floor函式返回不大於引數的最大整數(趨近於正無窮), ceiling返回不小於引數的最小整數(趨近於負無窮) 

路徑:                    元素 

/aaa                  選擇根元素aaa 

/aaa/ccc              選擇所有子元素ccc 

/aaa/ddd/bbb          選擇子元素ddd中的bbb元素 

//bbb                 選擇所有bbb元素 

//ddd/bbb             選擇所有父元素是ddd的bbb元素 

/aaa/ccc/ddd/*        選中元素bbb 

/*/*/*/bbb            選擇所有的有3個祖先元素的bbb元素 

//*                   選擇所有 

/aaa/bbb[1]           選擇第乙個bbb 

/aaa/bbb[last()]      選擇最後乙個bbb 

//@id                 選擇所有id屬性 

//bbb[@id]            選擇有id屬性的bbb元素 

//bbb[@*]             選擇具有屬性的bbb元素 

//bbb[not(@*)]        與上相反 

//bbb[@id=1]          選擇屬性id值等於1的bbb元素 

//bbb[normalize-space(@name)='bbb'] 

//*[count(bbb)=2]     選擇含有2個bbb子元素的元素 

//*[count(*)=2]       選擇含有2個子元素的元素 

//*[name()='bbb']     選擇所有名稱為bbb的元素(這裡等價於//bbb) 

//*[starts-with(name(),'b')] 選擇所有名稱以"b"起始的元素 

//*[contains(name(),'c')]  選擇所有名稱包含"c"的元素 

//*[string-length(name()) > 3]  選擇名字長度大於3的元素 

//ccc | //bbb         選擇所有的ccc和bbb元素 

/child::aaa/child::bbb 等價於 /aaa/bbb 

/descendant::*        選擇文件根元素的所有後代.即所有的元素被選擇 

/aaa/bbb/descendant::*  選擇/aaa/bbb的所有後代元素 

//ccc/descendant::*   選擇在祖先元素中有ccc的所有元素 

//ccc/descendant::ddd  選擇所有以ccc為祖先元素的ddd元素 

//ddd/parent::*       選擇ddd元素的所有父節點 

/aaa/bbb/ddd/ccc/eee/ancestor::* 

/aaa/bbb/following-sibling::* following-sibling軸(axis)包含上下文節點之後的所有兄弟節點 

/aaa/***/preceding-sibling::* 與上相反 

/aaa/***/following::*  包含同一文件中按文件順序位於上下文節點之後的所有節點, 除了祖先節點,屬性節點和命名空間節點 

/aaa/***/preceding::*   包含同一文件中按文件順序位於上下文節點之前的所有節點, 除了祖先節點,屬性節點和命名空間節點 

/aaa/***/descendant-or-self::*  descendant-or-self 軸(axis)包含上下文節點本身和該節點的後代節點 

/aaa/***/ddd/eee/ancestor-or-self::*  ancestor-or-self 軸(axis)包含上下文節點本身和該節點的祖先節點 

//bbb[position() mod 2 = 0 ]    選擇偶數字置的bbb元素 

//bbb[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]   選擇中間的bbb元素 

C 操作xml之xpath語法

以前也發過關於.net中操作xml的帖子,但不是很詳細,現在我將詳細介紹一下c 如何操作xml檔案,正如學習運算元據庫要學習sql語言一樣,在學習操作xml與語言之前,我們要先熟悉一下xml的 sql 語句xpath。由於本系列帖子的目的不在於詳細介紹xpath語法所以,我借用了園子裡leves的帖...

C 操作xml之xpath語法

以前也發過關於.net中操作xml的帖子,但不是很詳細,現在我將詳細介紹一下c 如何操作xml檔案,正如學習運算元據庫要學習sql語言一 樣,在學習操作xml與語言之前,我們要先熟悉一下xml的 sql 語句xpath。由於本系列帖子的目的不在於詳細介紹xpath語法所以,我借用了 園子裡leves...

C 操作xml之xpath語法

以前也發過關於.net中操作xml的帖子,但不是很詳細,現在我將詳細介紹一下c 如何操作xml檔案,正如學習運算元據庫要學習sql語言一樣,在學習操作xml與語言之前,我們要先熟悉一下xml的 sql 語句xpath。由於本系列帖子的目的不在於詳細介紹xpath語法所以,我借用了園子裡leves的帖...