天天看點

[轉貼]xPath常用文法執行個體版

執行個體 1

基本的XPath文法類似于在一個檔案系統中定位檔案,如果路徑以斜線 / 開始, 那麼該路徑就表示到一個元素的絕對路徑

/AAA

選擇根元素AAA

     <AAA>

          <BBB/>

          <CCC/>

          <DDD>

               <BBB/>

          </DDD>

     </AAA>

/AAA/CCC

選擇AAA的所有CCC子元素

/AAA/DDD/BBB

選擇AAA的子元素DDD的所有子元素

執行個體 2

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

//BBB

選擇所有BBB元素

          <CCC>

               <DDD>

                    <BBB/>

               </DDD>

          </CCC>

//DDD/BBB

選擇所有父元素是DDD的BBB元素

執行個體 3

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

/AAA/CCC/DDD/*

選擇所有路徑依附于/AAA/CCC/DDD的元素

          <XXX>

                    <EEE/>

                    <FFF/>

          </XXX>

               <BBB>

                    <BBB>

                         <BBB/>

                    </BBB>

               </BBB>

/*/*/*/BBB

選擇所有的有3個祖先元素的BBB元素

//*

選擇所有元素

執行個體 4

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

/AAA/BBB[1]

選擇AAA的第一個BBB子元素

/AAA/BBB[last()]

選擇AAA的最後一個BBB子元素

執行個體 5

//@id

選擇所有的id屬性

          <BBB id = "b1"/>

          <BBB id = "b2"/>

          <BBB name = "bbb"/>

//BBB[@id]

選擇有id屬性的BBB元素

//BBB[@name]

選擇有name屬性的BBB元素

//BBB[@*]

選擇有任意屬性的BBB元素

//BBB[not(@*)]

選擇沒有屬性的BBB元素

執行個體 6

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

//BBB[@id='b1']

選擇含有屬性id且其值為'b1'的BBB元素

          <BBB name = " bbb "/>

//BBB[@name='bbb']

選擇含有屬性name且其值為'bbb'的BBB元素

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

選擇含有屬性name且其值(在用normalize-space函數去掉前後空格後)為'bbb'的BBB元素

執行個體 7

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

//*[count(BBB)=2]

選擇含有2個BBB子元素的元素

          <EEE>

               <CCC/>

               <DDD/>

          </EEE>

//*[count(*)=2]

選擇含有2個子元素的元素

//*[count(*)=3]

選擇含有3個子元素的元素

執行個體 8

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

//*[name()='BBB']

選擇所有名稱為BBB的元素(這裡等價于//BBB)

          <BCC>

          </BCC>

          <DDB>

          </DDB>

          <BEC>

               <DBD/>

          </BEC>

//*[starts-with(name(),'B')]

選擇所有名稱以"B"起始的元素

//*[contains(name(),'C')]

選擇所有名稱包含"C"的元素

執行個體 10

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

//CCC | //BBB

選擇所有的CCC和BBB元素

          <EEE/>

/AAA/EEE | //BBB

選擇所有的BBB元素和所有是AAA的子元素的EEE元素

/AAA/EEE | //DDD/CCC | /AAA | //BBB

可以合并的路徑數目沒有限制

執行個體 11

child軸(axis)包含上下文節點的子元素, 作為預設的軸,可以忽略不寫.

等價于 /child::AAA

/child::AAA

等價于/AAA

/AAA/BBB

等價于/child::AAA/child::BBB

/child::AAA/child::BBB

等價于/AAA/BBB

/child::AAA/BBB

二者都可以被合并

執行個體 12

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

/descendant::*

選擇文檔根元素的所有後代.即所有的元素被選擇

          <BBB>

                    <CCC>

                         <DDD/>

                         <EEE/>

                    </CCC>

          </BBB>

                    <EEE>

                         <DDD>

                              <FFF/>

                         </DDD>

                    </EEE>

/AAA/BBB/descendant::*

選擇/AAA/BBB的所有後代元素

//CCC/descendant::*

選擇在祖先元素中有CCC的所有元素

//CCC/descendant::DDD

選擇所有以CCC為祖先元素的DDD元素

執行個體 13

parent軸(axis)包含上下文節點的父節點, 如果有父節點的話

//DDD/parent::*

選擇DDD元素的所有父節點

執行個體 14

ancestor軸(axis)包含上下節點的祖先節點, 該祖先節點由其上下文節點的父節點以及父節點的父節點等等諸如此類的節點構成,是以ancestor軸總是包含有根節點,除非上下文節點就是根節點本身.

/AAA/BBB/DDD/CCC/EEE/ancestor::*

選擇一個絕對路徑上的所有節點

//FFF/ancestor::*

選擇FFF元素的祖先節點

執行個體 15

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

/AAA/BBB/following-sibling::*

                    <DDD/>

                    <CCC/>

                    <FFF>

                         <GGG/>

                    </FFF>

//CCC/following-sibling::*

執行個體 16

preceding-sibling 軸(axis)包含上下文節點之前的所有兄弟節點

/AAA/XXX/preceding-sibling::*

//CCC/preceding-sibling::*

執行個體 17

following軸(axis)包含同一文檔中按文檔順序位于上下文節點之後的所有節點, 除了祖先節點,屬性節點和命名空間節點

/AAA/XXX/following::*

               <ZZZ>

                    <DDD>

                    </DDD>

               </ZZZ>

               <FFF>

                    <GGG/>

               </FFF>

//ZZZ/following::*

執行個體 18

preceding軸(axis)包含同一文檔中按文檔順序位于上下文節點之前的所有節點, 除了祖先節點,屬性節點和命名空間節點

/AAA/XXX/preceding::*

//GGG/preceding::*

執行個體 19

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

/AAA/XXX/descendant-or-self::*

//CCC/descendant-or-self::*

執行個體 20

ancestor-or-self 軸(axis)包含上下文節點本身和該節點的祖先節點

/AAA/XXX/DDD/EEE/ancestor-or-self::*

//GGG/ancestor-or-self::*

執行個體 21

ancestor, descendant, following, preceding 和self軸(axis)分割了XML文檔(忽略屬性節點和命名空間節點), 不能交疊, 而一起使用則包含所有節點

//GGG/ancestor::*

               <ZZZ/>

                         <HHH/>

                         <GGG>

                              <JJJ>

                                   <QQQ/>

                              </JJJ>

                              <JJJ/>

                         </GGG>

//GGG/descendant::*

//GGG/following::*

//GGG/self::*

//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*

執行個體 22

div運算符做浮點除法運算, mod運算符做求餘運算, floor函數傳回不大于參數的最大整數(趨近于正無窮), ceiling傳回不小于參數的最小整數(趨近于負無窮)

//BBB[position() mod 2 = 0 ]

選擇偶數位置的BBB元素

//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]

選擇中間的BBB元素

//CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]

選擇中間的CCC元素