XPath is a language used to search for information in XML documents. XPath is used to navigate through elements and attributes in XML documents.
(My understanding: XPath is a path language used to find XML nodes, and a path string syntax)
XML instance document
We will use this XML document in the following example.
<? 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>
Select Node
XPath uses path expressions to select nodes in XML documents. Nodes are selected by following the path or step. The most useful path expressions are listed below:
Expression |
Description |
Nodename |
Select all child nodes of the node. |
/ |
Select from the root node. |
// |
Select the nodes in the document from the current node that matches the selected node, regardless of their location. |
. |
Select the current node. |
.. |
Select the parent node of the current node. |
@ |
Select attributes. |
In the following table, we have listed some path expressions and expression results:
Path expression |
Result |
Bookstore |
Select All subnodes of the bookstore element. |
/Bookstore |
Select the root element bookstore. Note: If the path starts with a forward slash (/), the path always represents the absolute path to an element! |
Bookstore/book |
Select all the book elements that belong to the sub-elements of bookstore. |
// Book |
Select All book child elements regardless of their location in the document. |
Bookstore // book |
Select all the book elements belonging to the descendant of the bookstore element, regardless of where they are located under the bookstore. |
// @ Lang |
Select all properties named Lang. |
Predicates)
It is used to find a specific node or a node that contains a specified value.
The predicates are embedded in square brackets.
In the following table, we list some path expressions with predicates and the results of the expressions:
Path expression |
Result |
/Bookstore/book [1] |
Select the first book element that belongs to the bookstore sub-element. |
/Bookstore/book [last ()] |
Select the last book element that belongs to the bookstore sub-element. |
/Bookstore/book [last ()-1] |
Select the penultimate book element that belongs to the bookstore sub-element. |
/Bookstore/book [position () <3] |
Select the first two bookstore sub-elements. |
// Title [@ Lang] |
Select all the title elements with the lang attribute. |
// Title [@ lang = 'eng'] |
Select All title elements and these elements have the lang attribute whose value is Eng. |
/Bookstore/book [price> 35.00] |
Select all the book elements of the bookstore element, and the value of the price element must be greater than 35.00. |
/Bookstore/book [price> 35.00]/Title |
Select all the title elements of the book element in the bookstore element, and the value of the price element must be greater than 35.00. |
Select unknown Node
The XPath wildcard can be used to select unknown XML elements.
Wildcard |
Description |
* |
Match any element node. |
@* |
Match any attribute node. |
Node () |
Match any type of nodes. |
In the following table, we list some path expressions and the results of these expressions:
Path expression |
Result |
/Bookstore /* |
Select all child elements of the bookstore element. |
//* |
Select all elements in the document. |
// Title [@ *] |
Select All title elements with attributes. |
Select several paths
You can select several paths by using the "|" operator in the path expression.
In the following table, we list some path expressions and the results of these expressions:
Path expression |
Result |
// Book/Title | // book/price |
Select all the title and price elements of the book element. |
// Title | // price |
Select all the title and price elements in the document. |
/Bookstore/book/Title | // price |
Select all the title elements of the book element that belongs to the bookstore element and all the price elements in the document. |
XPath axis (axes)
The axis defines the node set relative to the current node.
Axis name |
Result |
Ancestor |
Select all the ancestors of the current node (parent, grandfather, etc ). |
Ancestor-or-self |
Select all the ancestors of the current node (parent, grandfather, etc.) and the current node itself. |
Attribute |
Select all attributes of the current node. |
Child |
Select all child elements of the current node. |
Descendant |
Select all descendant elements (child, sun, etc.) of the current node ). |
Descendant-or-self |
Select all descendant elements (child, sun, etc.) of the current node and the current node itself. |
Following |
Select all nodes after the end label of the current node in the document. |
Namespace |
Select All namespace nodes of the current node. |
Parent |
Select the parent node of the current node. |
Preceding |
Select all nodes before the start label of the current node in the document. |
Preceding-sibling |
Select all peer nodes before the current node. |
Self |
Select the current node. |
XPath Operators
Operators available in XPath expressions are listed below:
Operator |
Description |
Instance |
Return Value |
| |
Calculate two node sets |
// Book | // CD |
Returns all node sets with 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 |
If the price is 9.80, true is returned. If the price is 9.90, false is returned. |
! = |
Not equal |
Price! = 9.80 |
If the price is 9.90, true is returned. If the price is 9.80, false is returned. |
< |
Less |
Price <1, 9.80 |
If the price is 9.00, true is returned. If the price is 9.90, false is returned. |
<= |
Less than or equal |
Price <= 9.80 |
If the price is 9.00, true is returned. If the price is 9.90, false is returned. |
> |
Greater |
Price> 9.80 |
If the price is 9.90, true is returned. If the price is 9.80, false is returned. |
> = |
Greater than or equal |
Price >=9.80 |
If the price is 9.90, true is returned. If the price is 9.70, false is returned. |
Or |
Or |
Price = 9.80 or price = 9.70 |
If the price is 9.80, true is returned. If the price is 9.50, false is returned. |
And |
And |
Price> 9.00 and price <9.90 |
If the price is 9.80, true is returned. If the price is 8.50, false is returned. |
MoD |
Calculate the remainder of the Division |
5 mod 2 |
1 |
XPath beginners are actually very simple