XPath 語法規則

http://www.cnblogs.com/michaelsea/archive/2007/10/18/929230.html
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
XPathW3C標準

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. 
XQueryXPointer都創建於XPath表達式。XQuery 1.0  XPath 2.0共享相同的數據模型並支持相同的函數和操做

XPath is a W3C Standard
XPathW3C標準
XPath became a W3C Recommendation 16. November 1999.
XPat19991116成爲W3C的推薦標準
XPath was designed to be used by XSLT, XPointer and other XML parsing software.
XPath被設計成爲用語XSLT,XPoniter以及其餘XML解析的軟件。
XPath Nodes()
翻譯:Linyupark / 2006-03-24
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元素是titleauthoryearprice的父親
<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,yearprice元素都是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語法
翻譯:Linyupark / 2006-03-24
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元素所包含的全部元素(其實就爲bookstorebook元素所包含的元素)]
//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屬性而且值爲engtitle元素]
/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[選擇全部bookstorebook元素裏price元素內容大於35.00book元素]
/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[選擇bookstorebook的子元素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[選擇全部booktitleprice元素]
//title | //price
Selects all the title AND price elements in the document[選擇全部titleprice元素]
/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 
翻譯:Linyupark / 2006-03-24
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運算符
翻譯:無 / 2006-03-24
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實例
翻譯:Linyupark / 2006-03-24
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>

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")

Select the First book Node
選擇第一個book節點
The following example selects only the first book node under the bookstore element:
xmlDoc.selectNodes("/bookstore/book[0]")
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()")

Selecting price Nodes with Price>35
選擇price大於35price節點
The following example selects all the price nodes with a price higher than 35:
xmlDoc.selectNodes("/bookstore/book[price>35]/price")

Selecting title Nodes with Price>35
選擇Price大於35title節點
The following example selects all the title nodes with a price higher than 35:
xmlDoc.selectNodes("/bookstore/book[price>35]/title")
相關文章
相關標籤/搜索