XPATH學習總結

來源:互聯網
上載者:User
 公司最近組織了一次XSLT方面的培訓,就到http://www.w3school.com.cn/上瀏覽了些相關資料,收穫還不少,這裡稍作總結,方便以後查詢。

一 XPath簡介

        XPath 是一門在 XML 文檔中尋找資訊的語言,可用來在 XML 文檔中對元素和屬性進行遍曆。
XPath 是 W3C XSLT 標準的主要元素,並且 XQuery 和 XPointer 同時被構建於 XPath 表達之上,因此要學習XSLT,首先要先瞭解一下XPATH。

二 XPath術語

        這部分是照本宣科,參考:http://www.w3school.com.cn/xpath/xpath_nodes.asp

        先參考一個xml文檔,如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
  <list>
    <book>
        <title language="en">Think in Java</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
    </book>
  </list>
</root>

 

1.節點(Node)

在 XPath 中,有七種類型的節點:元素、屬性、文本、命名空間、處理指示、注釋以及文檔(根)節點。XML 文檔是被作為節點樹來對待的。樹的根被稱為文檔節點或者根節點。

在上面的例子中,<root>節點被成為文檔節點,<book>節點是元素節點,language="en"是屬性節點。

2.基本值(或稱原子值,Atomic value)

        基本值是無父或無子的節點。

        樣本:Think in Java,en都是原子節點。

3.節點關係

節點之間存在如下幾種關係,字面意思很明白了,就不作解釋了。

(1).父(Parent)
(2).子(Children)
(3).同胞(Sibling)
(4).先輩(Ancestor)
(5).後代(Descendant)

三 XPath的文法

        XPath 使用路徑運算式來選取 XML 文檔中的節點或節點集。節點是通過沿著路徑 (path) 或者步 (steps) 來選取的。

1.位置路徑運算式

        位置路徑可以是絕對的,也可以是相對的。

        絕對路徑起始於正斜杠( / ),而相對路徑不會這樣。在兩種情況中,位置路徑均包括一個或多個步,每個步均被斜杠分割。

        下面列出了最常用的路徑運算式

運算式

描述

nodename 選取此節點的所有子節點
/ 從根節點選取
// 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置
. 選取當前節點
.. 選取當前節點的父節點
@ 選取屬性

2.謂語

謂語用來尋找某個特定的節點或者包含某個指定的值的節點。謂語被嵌在方括弧中。

樣本:

//list/book[1]:提取list節點下的第一個book節點

//list/book[last()]:提取list節點下的最後一個book節點

//title[@language='en']:提取language屬性等於en的title節點

3.選取未知節點

XPath 萬用字元可用來選取未知的 XML 元素。

萬用字元

描述

* 匹配任何元素節點
@* 匹配任何屬性節點
node() 配任何類型的節點

4.XPath軸

軸可定義某個相對於當前節點的節點集。

軸名稱

結果

ancestor 選取當前節點的所有先輩(父、祖父等)
ancestor-or-self 選取當前節點的所有先輩(父、祖父等)以及當前節點本身
attribute 選取當前節點的所有屬性
child 選取當前節點的所有子項目。
descendant 選取當前節點的所有後代元素(子、孫等)。
descendant-or-self 選取當前節點的所有後代元素(子、孫等)以及當前節點本身。
following 選取文檔中當前節點的結束標籤之後的所有節點。
namespace 選取當前節點的所有命名空間節點
parent 選取當前節點的父節點。
preceding 選取文檔中當前節點的開始標籤之前的所有節點。
preceding-sibling 選取當前節點之前的所有同級節點。
self 選取當前節點。

5.步(step)

步(step)包括:

軸(axis):定義所選節點與當前節點之間的樹關係

節點測試(node-test):識別某個軸內部的節點

零個或者更多謂語(predicate): 更深入地提煉所選的節點集

步的文法:

軸名稱::節點測試[謂語]

樣本:

例子

結果

child::book 選取所有屬於當前節點的子項目的 book 節點
attribute::languane 選取當前節點的 languange 屬性
child::* 選取當前節點的所有子項目
attribute::* 選取當前節點的所有屬性
child::text() 選取當前節點的所有文本子節點
child::node() 選取當前節點的所有子節點
descendant::book 選取當前節點的所有 book 後代
ancestor::book 選擇當前節點的所有 book 先輩

四.XPath運算子

        XPath支援的運算主要有加、減、乘、除、模、與、或及相關比較運算(如:等於,大於,小於等),具體可以參考http://www.w3school.com.cn/xpath/xpath_operators.asp

五.相關函數

XPath支援的函數很多,具體可以參考:http://www.w3school.com.cn/xpath/xpath_functions.asp

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.