XPath 讀書筆記

來源:互聯網
上載者:User

<?xml version="1.0" encoding="ISO-8859-1"?>
<books>
<book type=”hardback”>
<title>Atlas Shrugged</title>
<author>Ayn Rand</author>
<isbn>0525934189</isbn>
</book>
<book type=”paperback”>
<title>A Burnt-Out Case</title>
<author>Graham Greene</author>
<isbn>0140185399</isbn>
</book>
</books>

每個結點可以是以下七個類型之一:根(root)、元素(element)、屬性(attribute)、本文(text)、命名空間(namespace)、處理指示(processing instruction)和注釋(comment)

所有的book元素://books/book
雙正斜杠(//)表示返回XML文檔中的所有符合尋找準則的元素,而忽略文檔中元素的位置層級。

所有的ISBN元素:/books/book/isbn
返回如下的元素:
<books>
<book type=”hardback”>
<isbn>0525934189</isbn>
</book>
<book type=”paperback”>
<isbn>0140185399</isbn>
</book>
</books>

所有標題為Atlas Shrugged的book元素:/books/book[title=”Atlas Shrugged”]

/books/book[author]
方括弧符號讓你使用屬性作為尋找準則

所有type屬性值為hardback的書://book[@type=”hardback”]
返回下面的元素:
<book type=”hardback”>
<title>Atlas Shrugged</title>
<author>Ayn Rand</author>
<isbn>0525934189</isbn>
</book>

方括弧符號在XPath文檔中稱為謂詞,方括弧的另外一個用途是標識需要檢索的項數。
返回第一個book元素:/books/book[1]
<book type=”hardback”>
<title>Atlas Shrugged</title>
<author>Ayn Rand</author>
<isbn>0525934189</isbn>
</book>

用萬用字元(*)可以很容易的檢索到在根結點下的所有元素。

所有的book元素:/books/*

所有屬性type值為hardcover或softcover的book元素://books/book[@type=”hardcover”] | //books/book[@type=”softcover”]
符號(|)與邏輯OR操作符相同。

語句的第一個字元決定參考點,以正斜杠(/)開始的語句被看作查詢時將使用絕對路徑。

使用相對路徑的例子:
在當前的參考點下開始尋找
book/*

單個圓點表示選擇當前結點,雙圓點表示選擇父結點。

當前結點的父結點的所有子結點:
../*

==============================================================================================================
<A id="a1">
  <B id="b1">
    <C id="c1">
      <B name="b"/>
      <D id="d1"/>
      <E id="e1"/>
      <E id="e2"/>
    </C>
  </B>
  <B id="b2"/>
  <C id="c2">
    <B/>
    <D id="d2"/>
    <F/>
  </C>
  <E/>
</A>

/A/B/C[1] A元素→B元素→C元素的第一個子項目 name值為b的B元素

/A/B/C[last()] A元素→B元素→C元素的最後一個子項目 id值為e2的E元素

/A/B/C[position()>1] A元素→B元素→C元素之下的位置號大於1的元素 id值為d1的D元素和兩個具有id值的E元素

//B[@id] 所有具有屬性id的B元素  id值為b1和b2的兩個B元素
//B[@*]  所有具有屬性的B元素  兩個具有id屬性的B元素和一個具有name屬性B元素
//B[not(@*)] 所有不具有屬性的B元素  A元素→C元素下的B元素
//B[@id="b1"] id值為b1的B元素   A元素下的B元素

//E/parent::*  所有E節點的父節點元素  id值為a1的A元素和id值為c1的C元素

//F/ancestor::*  所有F元素的祖先節點元素  id值為a1的A元素和id值為c2的C元素

/A/child::*  A的子項目  id值為b1、b2的B元素,id值為c2的C元素,以及沒有任何屬性的E元素

/A/descendant::* A的所有後代元素  除A元素以外的所有其它元素

//F/self::*  所有F的自身元素  F元素本身

//F/ancestor-or-self::*  所有F元素及它的祖先節點元素  F元素、F元素的父節點C元素和A元素

/A/C/descendant-or-self::* 所有A元素→C元素及它們的後代元素 id值為c2的C元素、該元素的子項目B、D、F元素

/A/C/following-sibling::* A元素→C元素的緊鄰的後序所有兄弟節點元素 沒有任何屬性的E元素

/A/C/preceding-sibling::* A元素→C元素的緊鄰的前面所有兄弟節點元素 id值為b1和b2的兩個B元素

/A/B/C/following::*  A元素→B元素→C元素的後序的所有元素  id為b2的B元素、無屬性的C元素、無屬性的B元素、id為d2的D元素、無屬性的F元素、無屬性的E元素。

/A/C/preceding::*  A元素→C元素的前面的所有元素   id為b2的B元素、id為e2的E元素、id為e1的E元素、id為d1的D元素、name為b的B元素、id為c1的C元素、id為b1的B元素

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.