XPath

XPath is a language for finding information in an XML document. XPath is used to navigate through elements and attributes in an XML document.
Xpath是一種能夠在XML文檔中尋找信息的語言。它通過XML文檔中的元素和屬性來進行導航。 

 


--------------------------------------------------------------------------------

What You Should Already Know
你應具備的知識
Before you continue you should have a basic understanding of the following:
在你繼續前你應該具備以下知識的基礎:

HTML / XHTML 
XML / XML Namespaces[命名空間] 

--------------------------------------------------------------------------------

What is XPath?
什麼是XPath?
XPath is a syntax for defining parts of an XML document
XPath 是針對XML文檔部分內容定義的語法 
XPath uses path expressions to navigate in XML documents
XPath 使用路徑表達式在XML文檔中導航 
XPath contains a library of standard functions
XPath 包含了一系列標準函數 
XPath is a major element in XSLT
XPath 在XSLT當中是一個主要的元素 
XPath is a W3C Standard
XPath是W3C標準 

--------------------------------------------------------------------------------

XPath Path Expressions
XPath 路徑表達式
XPath uses path expressions to select nodes or node-sets in an XML document. These path expressions look very much like the expressions you see when you work with a traditional computer file system.
XPath 使用路徑表達式來選擇XML文檔中的nodes(節)或是node-set(節集)。這些路徑表達式看上去與你平時所見的傳統計算機文件系統路徑非常地相似。


--------------------------------------------------------------------------------

XPath Standard Functions
XPath 標準函數
XPath includes over 100 built-in functions. There are functions for string values, numeric values, date and time comparison, node and QName manipulation, sequence manipulation, Boolean values, and more.
XPath包含了數量超過100的內置函數。這些函數針對字符串值,數字值,日期和時間比較,節操作,順序操作,布爾值,等等。 


--------------------------------------------------------------------------------

XPath is Used in XSLT
XPath被用在XSLT
XPath is a major element in the XSLT standard. Without XPath knowledge you will not be able to create XSLT documents.
在XSLT標準中XPath是主要的元素。沒有XPath知識你將很難建立XSLT文檔。

XQuery and XPointer are both built on XPath expressions. XQuery 1.0 and XPath 2.0 share the same data model and support the same functions and operators. 
XQuery和XPointer都建立於XPath表達式。XQuery 1.0 和 XPath 2.0共享相同的數據模型並支持相同的函數和操作


--------------------------------------------------------------------------------

XPath is a W3C Standard
XPath是W3C標準
XPath became a W3C Recommendation 16. November 1999.
XPat於1999年11月16日成爲W3C的推薦標準

XPath was designed to be used by XSLT, XPointer and other XML parsing software.
XPath被設計成爲用語XSLT,XPoniter以及其他XML解析的軟件。

 

 

XPath Nodes(節)

In XPath, there are seven kinds of nodes: element, attribute, text, namespace, processing-instruction, comment, and document (root) nodes.
在XPath中有七種nodes(節):元素,屬性,文字,命名空間,處理說明,註釋,和文檔(根)節。


--------------------------------------------------------------------------------

XPath Terminology
XPath術語
Nodes/節
In XPath, there are seven kinds of nodes: element, attribute, text, namespace, processing-instruction, comment, and document (root) nodes. XML documents are treated as trees of nodes. The root of the tree is called the document node (or root node).
XML文檔被視爲數狀的節。樹的根部被稱爲文檔的節(或根節)。

Look at the following XML document:
觀察下面的XML文檔:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author> 
  <year>2005</year>
  <price>29.99</price>
</book>
</bookstore>
Example of nodes in the XML document above:
上面舉例的XML文檔的節有:

<bookstore>  (document node)
<author>J K. Rowling</author>  (element node)
lang="en"  (attribute node)
Atomic values
原子值
Atomic values are nodes with no children or parent.
原子值是那些沒有子或父的節(無上下關係)。

Example of atomic values:
舉例中的原子值:

J K. Rowling
"en"
Items
項目
Items are atomic values or nodes.
項目是原子值或節。


--------------------------------------------------------------------------------

Relationship of Nodes
節之間的關係
Parent/父
Each element and attribute has one parent.
每個元素和屬性有一父親。

In the following example; the book element is the parent of the title, author, year, and price:
下面的舉例中:book元素是title,author,year和price的父親

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
Children/子
Element nodes may have zero, one or more children.
元素節可能有0個或多個子

In the following example; the title, author, year, and price elements are all children of the book element:
下面的舉例中:title,author,year和price元素都是book元素的子元素

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
Siblings/兄
Nodes that have the same parent.
指那些有相同父的

In the following example; the title, author, year, and price elements are all siblings:
下面的舉例中title, author, year, 和 price元素都爲兄弟

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
Ancestors/祖
A node's parent, parent's parent, etc.
節的父,父的父....都爲祖

In the following example; the ancestors of the title element are the book element and the bookstore element:
下面的舉例中:book元素和bookstore元素都爲title元素的祖元素

<bookstore>
<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
</bookstore>
Descendants/孫
A node's children, children's children, etc.
節的子,子的子...都爲孫

In the following example; descendants of the bookstore element are the book, title, author, year, and price elements:
下面的舉例中:bookstore元素的孫有book,title,author,year以及price元素

<bookstore>
<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
</bookstore>
XPath語法

XPath uses path expressions to select nodes or node-sets in an XML document. The node is selected by following a path or steps.
XPath使用路徑表達式來選擇XML文檔的節或是節集。順着路徑或步驟來選擇節。


--------------------------------------------------------------------------------

The XML Example Document
XML實例文檔
We will use the following XML document in the examples below.
舉例中我們將使用下面的XML文檔

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

 

--------------------------------------------------------------------------------

Selecting Nodes
選擇節
XPath uses path expressions to select nodes in an XML document. The node is selected by following a path or steps. The most useful path expressions are listed below:
一些非常有用的路徑表達式: 

表達式 描述 
nodename Selects all child nodes of the node[選擇所有目前節的子節] 
/ Selects from the root node[從根節進行選擇] 
// Selects nodes in the document from the current node that match the selection no matter where they are [選擇文檔中相吻合的節而不管其在文檔的何處] 
. Selects the current node[選擇當前節] 
.. Selects the parent of the current node[當前節的父節] 
@ Selects attributes[選擇屬性] 

Examples
實例
In the table below we have listed some path expressions and the result of the expressions:
下面我們所列舉的表格有路徑表達式以及其結果:

路徑表達式 結果 
bookstore Selects all the child nodes of the bookstore element[選擇所有bookstore元素的子節] 
/bookstore Selects the root element bookstore 
Note: If the path starts with a slash ( / ) it always represents an absolute path to an element!

[選擇了bookstore的根元素。注意:如果路徑的開始爲(/)那此路徑一定是到該元素的絕對路徑] 
bookstore/book Selects all book elements that are children of bookstore[選擇了所有在bookstore的子元素book元素所包含的所有元素(其實就爲bookstore裏book元素所包含的元素)] 
//book Selects all book elements no matter where they are in the document[選擇所有爲book元素的內容而不管book元素處於何處(有不同的父也沒關係)] 
bookstore//book Selects all book elements that are descendant of the bookstore element, no matter where they are under the bookstore element[在bookstore元素內所有含有book元素的元素內容(只要book元素的祖元素爲bookstore元素那都符合條件)] 
//@lang Selects all attributes that are named lang[選擇所有屬性名爲lang的屬性] 


--------------------------------------------------------------------------------

Predicates
謂語
Predicates are used to find a specific node or a node that contains a specific value.
謂語用來指定明確的節所含有的特殊的值

Predicates are always embedded in square brackets.
謂語被嵌入在中括號

Examples
舉例
In the table below we have listed some path expressions with predicates and the result of the expressions:
下面的表格列舉了一些使用了謂語的路徑表達式以及其產生的結果:

路徑表達式 結果 
/bookstore/book[1]  Selects the first book element that is the child of the bookstore element[選擇了bookstore裏的第一個book元素] 
/bookstore/book[last()] Selects the last book element that is the child of the bookstore element[選擇bookstore裏最後一個book元素] 
/bookstore/book[last()-1] Selects the last but one book element that is the child of the bookstore element[bookstore中倒數第二個book元素] 
/bookstore/book[position()<3] Selects the first two book elements that are children of the bookstore element[在bookstore中前兩個book元素] 
//title[@lang] Selects all the title elements that have an attribute named lang[選擇所有含有lang屬性的title元素] 
//title[@lang='eng'] Selects all the title elements that have an attribute named lang with a value of 'eng'[選擇所有含有lang屬性並且值爲eng的title元素] 
/bookstore/book[price>35.00] Selects all the book elements of the bookstore element that have a price element with a value greater than 35.00[選擇所有bookstore中book元素裏price元素內容大於35.00的book元素] 
/bookstore/book[price>35.00]/title Selects all the title elements of the book elements of the bookstore element that have a price element with a value greater than 35.00[選擇bookstore中book的子元素title,並且其兄弟元素price的內容得大於35.00] 


--------------------------------------------------------------------------------

Selecting Unknown Nodes
選擇未知的節
XPath wildcards can be used to select unknown XML elements.
XPath的通配符可以用來選擇未知的XML元素

通配符 描述 
* Matches any element node[相吻合的所有元素節] 
@* Matches any attribute node[相吻合的所有屬性節] 
node() Matches any node of any kind[吻合任何類型的節] 

Examples實例
In the table below we have listed some path expressions and the result of the expressions:
下面的表格我們將列舉一些路徑表達式以及它們的結果

路徑表達式 結果 
/bookstore/* Selects all the child nodes of the bookstore element[選擇所有bookstore的子節] 
//* Selects all elements in the document[選擇所有文檔中的元素] 
//title[@*] Selects all title elements which have any attribute[選擇元素爲title並且其含有屬性] 


--------------------------------------------------------------------------------

Selecting Several Paths
選擇數個路徑
By using the | operator in an XPath expression you can select several paths.
通過在XPath中使用 | 你可以選擇數個路徑

Examples
實例
In the table below we have listed some path expressions and the result of the expressions:
下面的表格我們會列舉一些路徑表達式以及其結果:

路徑表達 結果 
//book/title | //book/price Selects all the title AND price elements of all book elements[選擇所有book裏title和price元素] 
//title | //price Selects all the title AND price elements in the document[選擇所有title和price元素] 
/bookstore/book/title | //price Selects all the title elements of the book element of the bookstore element AND all the price elements in the document[選擇所有book裏的title元素和所有price元素] 

XPath 軸


The XML Example Document
XML舉例文檔
We will use the following XML document in the examples below.
我麼將使用該XML文檔進行下面的舉例說明

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

 

 

--------------------------------------------------------------------------------

XPath Axes
XPath軸
An axis defines a node-set relative to the current node.
軸定義了相對於當前節的節集

軸名 結果 
ancestor Selects all ancestors (parent, grandparent, etc.) of the current node[選擇了當前節的所有祖(父,祖父,等等)] 
ancestor-or-self Selects all ancestors (parent, grandparent, etc.) of the current node and the current node itself[選擇當前節的所有祖並且還有當前節自己] 
attribute Selects all attributes of the current node[選擇所有當前節的屬性] 
child Selects all children of the current node[選擇所有當前節的子] 
descendant Selects all descendants (children, grandchildren, etc.) of the current node[選擇所有當前節的孫(子,孫子,等等)] 
descendant-or-self Selects all descendants (children, grandchildren, etc.) of the current node and the current node itself[選擇當前節的所有孫以及它本身] 
following Selects everything in the document after the closing tag of the current node[選擇所有在關閉當前節標籤後的所有內容] 
following-sibling Selects all siblings after the current node[選擇所有當前節後的兄] 
namespace Selects all namespace nodes of the current node[選擇所有當前節的命名空間] 
parent Selects the parent of the current node[選擇當前節的父] 
preceding Selects everything in the document that is before the start tag of the current node[選擇當前節之前的所有內容] 
preceding-sibling Selects all siblings before the current node[選擇所有當前節之前的兄] 
self Selects the current node[選擇當前節] 

 


--------------------------------------------------------------------------------

Location Path Expression
路徑表達試定位
A location path can be absolute or relative.
定位路徑可以是絕對的也可以是相對的

An absolute location path starts with a slash ( / ) and a relative location path does not. In both cases the location path consists of one or more steps, each separated by a slash:
絕對定位的路徑由(/)開始,而相對定位就不這樣。定位的路徑由一個或多個步驟所組成,每部分由(/)相分隔:

An absolute location path:
/step/step/...
A relative location path:
step/step/...
Each step is evaluated against the nodes in the current node-set.
在當前的節集中每步的賦值是逆向的

A step consists of:

an axis (defines the tree-relationship between the selected nodes and the current node) 
a node-test (identifies a node within an axis)[在軸中鑑定節] 
zero or more predicates (to further refine the selected node-set)[0個或多個謂語可以來更好的選擇節] 
The syntax for a location step is:
定位的語法

axisname::nodetest[predicate]
Examples
實例
Example 結果 
child::book Selects all book nodes that are children of the current node[選擇當前節點下所有爲book的子節點] 
attribute::lang Selects the lang attribute of the current node[選擇當前節點下所有屬性爲lang的內容] 
child::* Selects all children of the current node[選擇當前節下所有的子節] 
attribute::* Selects all attributes of the current node[選擇當前節所有的屬性] 
child::text() Selects all text child nodes of the current node[選擇當前節點所有子節點的文字] 
child::node() Selects all child nodes of the current node[選擇所有當前節點的子節點] 
descendant::book Selects all book descendants of the current node[選擇當前節點所有爲book的孫節點] 
ancestor::book Selects all book ancestors of the current node[選擇所有當前祖節點爲book的節點] 
ancestor-or-self::book Selects all book ancestors of the current node - and the current as well if it is a book node[當前節點和其祖節點爲book的節點] 
child::*/child::price Selects all price grandchildren of the current node[當前節點所有含price的孫子節點] 


 

XPath運算符


An XPath expression returns either a node-set, a string, a Boolean, or a number.


--------------------------------------------------------------------------------

XPath Operators
Below is a list of the operators that can be used in XPath expressions:

Operator Description Example Return value 
| Computes two node-sets //book | //cd Returns a node-set with all book and cd elements 
+ Addition 6 + 4 10 
- Subtraction 6 - 4 2 
* Multiplication 6 * 4
 24 
div Division 8 div 4 2 
= Equal price=9.80 true if price is 9.80
false if price is 9.90 
!= Not equal price!=9.80 true if price is 9.90
false if price is 9.80 
< Less than price<9.80 true if price is 9.00
false if price is 9.80 
<= Less than or equal to price<=9.80 true if price is 9.00
false if price is 9.90 
> Greater than price>9.80 true if price is 9.90
false if price is 9.80 
>= Greater than or equal to price>=9.80 true if price is 9.90
false if price is 9.70 
or or price=9.80 or price=9.70 true if price is 9.80
false if price is 9.50 
and and  price>9.00 and price<9.90 true if price is 9.80
false if price is 8.50 
mod Modulus (division remainder) 5 mod 2 1 

 

XPath實例


Let's try to learn some basic XPath syntax by looking at some examples.
讓我們來嘗試通過觀察一些實例來學習基礎的XPath語法


--------------------------------------------------------------------------------

The XML Example Document
We will use the following XML document in the examples below.
我們將使用下面這個XML文檔來進行實例

"books.xml":

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>
<book category="WEB">
  <title lang="en">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>
</bookstore>
View the "books.xml" file in your browser.


--------------------------------------------------------------------------------

Selecting Nodes
選擇節點
We will use the Microsoft XMLDOM object to load the XML document and the selectNodes() function to select nodes from the XML document:
我們使用了XMLDOM對象來加載XML文檔並用selectNode()函數來進行XML文檔上節點的選擇:

set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("books.xml")
xmlDoc.selectNodes(path expression)


--------------------------------------------------------------------------------

Select all book Nodes
選擇所有book節點
The following example selects all the book nodes under the bookstore element:
下面這個實例就會選擇所有bookstore元素以下的book節點:

xmlDoc.selectNodes("/bookstore/book")
如果你有IE5以上的版本你可以自己來做一下.


--------------------------------------------------------------------------------

Select the First book Node
選擇第一個book節點
The following example selects only the first book node under the bookstore element:

xmlDoc.selectNodes("/bookstore/book[0]")
If you have IE 5 or higher you can try it yourself.

Note: IE 5 and 6 has implemented that [0] should be the first node, but according to the W3C standard it should have been [1]!!


--------------------------------------------------------------------------------

Select the prices
選擇prices
The following example selects the text from all the price nodes:

xmlDoc.selectNodes("/bookstore/book/price/text()") 
If you have IE 5 or higher you can try it yourself.


--------------------------------------------------------------------------------

Selecting price Nodes with Price>35
選擇price大於35的price節點
The following example selects all the price nodes with a price higher than 35:

xmlDoc.selectNodes("/bookstore/book[price>35]/price") 
If you have IE 5 or higher you can try it yourself.


--------------------------------------------------------------------------------

Selecting title Nodes with Price>35
選擇Price大於35的title節點
The following example selects all the title nodes with a price higher than 35:

xmlDoc.selectNodes("/bookstore/book[price>35]/title") 

發佈了11 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章