XPath 11個實例

黄舟
發布: 2017-02-28 16:40:03
原創
1517 人瀏覽過

實例 1
基本的XPath語法類似於在一個檔案系統中定位檔案,如果路徑以斜線 / 開始, 那麼該路徑就表示到一個元素的絕對路徑。
/AAA
選擇根元素AAA
    

<AAA>           
<BBB/>           
<CCC/>           
<BBB/>           
<BBB/>          
 <DDD>                
 <BBB/>           
 </DDD>           
 <CCC/>      
 </AAA> 
/AAA/CCC
登入後複製

#選擇AAA的所有CCC子元素
    

<AAA>           
<BBB/>           
<CCC/>           
<BBB/>           
<BBB/>           
<DDD>                
<BBB/>           
</DDD>           
<CCC/>      
</AAA>  
/AAA/DDD/BBB
登入後複製

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

  <AAA> 
          <BBB/> 
          <CCC/> 
          <BBB/> 
          <BBB/> 
          <DDD> 
               <BBB/> 
          </DDD> 
          <CCC/> 
     </AAA>
登入後複製

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

     <AAA> 
          <BBB/> 
          <CCC/> 
          <BBB/> 
          <DDD> 
               <BBB/> 
          </DDD> 
          <CCC> 
               <DDD> 
                    <BBB/> 
                    <BBB/> 
               </DDD> 
          </CCC> 
     </AAA> 
 
//DDD/BBB
登入後複製

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

     <AAA> 
          <BBB/> 
          <CCC/> 
          <BBB/> 
          <DDD> 
               <BBB/> 
          </DDD> 
          <CCC> 
               <DDD> 
                    <BBB/> 
                    <BBB/> 
               </DDD> 
          </CCC> 
     </AAA>
登入後複製

 
實例3
星號* 表示選擇所有由星號之前的路徑所定位的元素
/AAA/CCC/DDD/*
選擇所有路徑依附於/AAA/CCC/DDD的元素

     <AAA> 
          <XXX> 
               <DDD> 
                    <BBB/> 
                    <BBB/> 
                    <EEE/> 
                    <FFF/> 
               </DDD> 
          </XXX> 
          <CCC> 
               <DDD> 
                    <BBB/> 
                    <BBB/> 
                    <EEE/> 
                    <FFF/> 
               </DDD> 
          </CCC> 
          <CCC> 
               <BBB> 
                    <BBB> 
                         <BBB/> 
                    </BBB> 
               </BBB> 
          </CCC> 
     </AAA> 
 
/*/*/*/BBB
登入後複製

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

     <AAA> 
          <XXX> 
               <DDD> 
                    <BBB/> 
                    <BBB/> 
                    <EEE/> 
                    <FFF/> 
               </DDD> 
          </XXX> 
          <CCC> 
               <DDD> 
                    <BBB/> 
                    <BBB/> 
                    <EEE/> 
                    <FFF/> 
               </DDD> 
          </CCC> 
          <CCC> 
               <BBB> 
                    <BBB> 
                         <BBB/> 
                    </BBB> 
               </BBB> 
          </CCC> 
     </AAA> 
 
//*
登入後複製

選擇所有元素

  <AAA> 
        <XXX> 
               <DDD> 
                    <BBB/> 
                    <BBB/> 
                    <EEE/> 
                    <FFF/> 
               </DDD> 
          </XXX> 
          <CCC> 
               <DDD> 
                    <BBB/> 
                    <BBB/> 
                    <EEE/> 
                    <FFF/> 
               </DDD> 
          </CCC> 
          <CCC> 
               <BBB> 
                    <BBB> 
                         <BBB/> 
                    </BBB> 
               </BBB> 
          </CCC> 
     </AAA>
登入後複製

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

/AAA/BBB[1]
選擇AAA的第一個BBB子元素
    

 <AAA> 
          <BBB/> 
          <BBB/> 
          <BBB/> 
          <BBB/> 
     </AAA> 
 
/AAA/BBB[last()]
登入後複製

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

#
    <AAA> 
          <BBB/> 
          <BBB/> 
          <BBB/> 
          <BBB/> 
     </AAA>
登入後複製

實例5


#//@id
選擇所有的id屬性
    

<AAA> 
          <BBB id = \"b1\"/> 
          <BBB id = \"b2\"/> 
          <BBB name = \"bbb\"/> 
          <BBB/> 
     </AAA> 
 
//BBB[@id]
登入後複製

選擇有id屬性的BBB元素
   

#
  <AAA> 
          <BBB id = \"b1\"/> 
          <BBB id = \"b2\"/> 
          <BBB name = \"bbb\"/> 
          <BBB/> 
     </AAA> 
 
//BBB[@name]
登入後複製

選擇有name屬性的BBB元素
    

<AAA> 
          <BBB id = \"b1\"/> 
          <BBB id = \"b2\"/> 
          <BBB name = \"bbb\"/> 
          <BBB/> 
     </AAA> 
 
//BBB[@*]
登入後複製

選擇任意屬性的BBB元素
    

<AAA> 
          <BBB id = \"b1\"/> 
          <BBB id = \"b2\"/> 
          <BBB name = \"bbb\"/> 
          <BBB/> 
     </AAA> 
 
//BBB[not(@*)]
登入後複製

選擇任意屬性的BBB元素
    

##選擇沒有屬性的BBB元素

    

##選擇沒有屬性的BBB元素

    

##

<AAA> 
          <BBB id = \"b1\"/> 
          <BBB id = \"b2\"/> 
          <BBB name = \"bbb\"/> 
          <BBB/> 
     </AAA>
登入後複製

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


//BBB[@id=\'b1\']
選擇含有屬性id且其值為\'b1\'的BBB元素

    

 <AAA> 
          <BBB id = \"b1\"/> 
          <BBB name = \" bbb \"/> 
          <BBB name = \"bbb\"/> 
     </AAA> 
 
//BBB[@name=\&#39;bbb\&#39;]
登入後複製

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

    


<AAA> 
          <BBB id = \"b1\"/> 
          <BBB name = \" bbb \"/> 
          <BBB name = \"bbb\"/> 
     </AAA> 
 
//BBB[normalize-space(@name)=\&#39;bbb\&#39;]
登入後複製

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

     <AAA> 
          <BBB id = \"b1\"/> 
          <BBB name = \" bbb \"/> 
          <BBB name = \"bbb\"/> 
     </AAA>
登入後複製

實例7
count()函數可以計數所選元素的數量


//*[count(BBB)=2 ]

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


     <AAA> 
          <CCC> 
               <BBB/> 
               <BBB/> 
               <BBB/> 
          </CCC> 
          <DDD> 
               <BBB/> 
               <BBB/> 
          </DDD> 
          <EEE> 
               <CCC/> 
               <DDD/> 
          </EEE> 
     </AAA> 
 
//*[count(*)=2]
登入後複製

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

     <AAA> 
          <CCC> 
               <BBB/> 
               <BBB/> 
               <BBB/> 
          </CCC> 
          <DDD> 
               <BBB/> 
               <BBB/> 
          </DDD> 
          <EEE> 
               <CCC/> 
               <DDD/> 
          </EEE> 
     </AAA> 
 
//*[count(*)=3]
登入後複製

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

<AAA> 
          <CCC> 
               <BBB/> 
               <BBB/> 
               <BBB/> 
          </CCC> 
          <DDD> 
               <BBB/> 
               <BBB/> 
          </DDD> 
          <EEE> 
               <CCC/> 
               <DDD/> 
          </EEE> 
     </AAA>
登入後複製

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


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

    

<AAA> 
          <BCC> 
               <BBB/> 
               <BBB/> 
               <BBB/> 
          </BCC> 
          <DDB> 
               <BBB/> 
               <BBB/> 
          </DDB> 
          <BEC> 
               <CCC/> 
               <DBD/> 
          </BEC> 
     </AAA> 
 
//*[starts-with(name(),\&#39;B\&#39;)]
登入後複製

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

#

<AAA> 
          <BCC> 
               <BBB/> 
               <BBB/> 
               <BBB/> 
          </BCC> 
          <DDB> 
               <BBB/> 
               <BBB/> 
          </DDB> 
          <BEC> 
               <CCC/> 
               <DBD/> 
          </BEC> 
     </AAA> 
 
//*[contains(name(),\&#39;C\&#39;)]
登入後複製

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

<AAA> 
          <BCC> 
               <BBB/> 
               <BBB/> 
               <BBB/> 
          </BCC> 
          <DDB> 
               <BBB/> 
               <BBB/> 
          </DDB> 
          <BEC> 
               <CCC/> 
               <DBD/> 
          </BEC> 
     </AAA>
登入後複製

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


//CCC | //BBB 
選擇所有的CCC和BBB元素

    

<AAA> 
          <BBB/> 
          <CCC/> 
          <DDD> 
               <CCC/> 
          </DDD> 
          <EEE/> 
     </AAA> 
 
/AAA/EEE | //BBB
登入後複製

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

<AAA> 
          <BBB/> 
          <CCC/> 
          <DDD> 
               <CCC/> 
          </DDD> 
          <EEE/> 
     </AAA> 
 
/AAA/EEE | //DDD/CCC | /AAA | //BBB
登入後複製

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

   <AAA> 
          <BBB/> 
          <CCC/> 
          <DDD> 
               <CCC/> 
          </DDD> 
          <EEE/> 
     </AAA>
登入後複製

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


/AAA
等價於/child::AAA

#

     <AAA> 
          <BBB/> 
          <CCC/> 
     </AAA> 
 
/child::AAA
登入後複製

等價於/AAA
   


#

  <AAA> 
          <BBB/> 
          <CCC/> 
     </AAA>
登入後複製

 
/AAA/BBB

等價於/child::AAA/child::BBB


     <AAA> 
          <BBB/> 
          <CCC/> 
     </AAA>
登入後複製
登入後複製

 
/child::AAA/child: :BBB

等價於/AAA/BBB


     <AAA> 
          <BBB/> 
          <CCC/> 
     </AAA>
登入後複製
登入後複製

/child::AAA/BBB

二者都可以合併
  

   <AAA> 
          <BBB/> 
          <CCC/> 
     </AAA>
登入後複製

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

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

     <AAA> 
          <BBB> 
               <DDD> 
                    <CCC> 
                         <DDD/> 
                         <EEE/> 
                    </CCC> 
               </DDD> 
          </BBB> 
          <CCC> 
               <DDD> 
                    <EEE> 
                         <DDD> 
                              <FFF/> 
                         </DDD> 
                    </EEE> 
               </DDD> 
          </CCC> 
     </AAA> 
 
/AAA/BBB/descendant::*
登入後複製

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

     <AAA> 
          <BBB> 
               <DDD> 
                    <CCC> 
                         <DDD/> 
                         <EEE/> 
                    </CCC> 
               </DDD> 
          </BBB> 
          <CCC> 
               <DDD> 
                    <EEE> 
                         <DDD> 
                              <FFF/> 
                         </DDD> 
                    </EEE> 
               </DDD> 
          </CCC> 
     </AAA> 
 
//CCC/descendant::*
登入後複製

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

  

   <AAA> 
          <BBB> 
               <DDD> 
                    <CCC> 
                         <DDD/> 
                         <EEE/> 
                    </CCC> 
               </DDD> 
          </BBB> 
    </AAA>
登入後複製
### 以上就是XPath 11個實例的內容,更多相關內容請關注PHP中文網(www.php.cn)! ################
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板