XPath Syntax

The XPath expression uses a path notation like URLs, for addressing parts of an XML document. The expression is evaluated to yield an object of the node-set, Boolean, number, or string type. For example, the expression book/author will return a node-set of the <author> elements contained in the <book> elements, if such elements are declared in the source XML document.

In XPath, path expression is used to select nodes or node-sets in an XML document. The node is selected by following a path or steps.

Let's take an example to see the syntax of XPath. Here, we take an XML document.

snippet
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
  <title lang="en">Three Mistakes of My Life</title>
  <price>110</price>
</book>
<book>
  <title lang="en">Immortals of Meluha</title>
  <price>200</price>
</book>
</bookstore>

Selecting Nodes

Path expressions used for selecting nodes are:

Index Expression Description
1) nodename Selects all nodes with the name "nodename"
2) / Selects from the root node.
3) // Selects nodes in the document from the current node that match the selection no matter where they are.
4) . Selects the current node
5) .. Selects the parent of the current node
6) @ Selects attributes

See the path expressions and their details in the above example:

Path Expression Result
bookstore Selects all nodes with the name "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/book Selects all book elements that are children of bookstore.
//book Selects all book elements no matter where they are in the document.
bookstore//book Selects all book elements that are descendant of the bookstore element, no matter where they are under the bookstore element.
//@lang Selects all attributes that are named 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.

In the table below we have listed some path expressions with predicates and the result of the expressions:

Path Expression Result
/bookstore/book[1] Selects the first book element that is the child of the bookstore element. Note: In IE 5,6,7,8,9 first node is[0], but according to W3C, it is [1]. To solve this problem in IE, set the selectionlanguage to XPath:
in JavaScript: xml.setProperty("SelectionLanguage","XPath");
/bookstore/book[last()] Selects the last book element that is the child of the bookstore element.
/bookstore/book[last()-1] Selects the last but one book element that is the child of the bookstore element.
/bookstore/book[position()<3] Selects the first two book elements that are children of the bookstore element.
//title[@lang] Selects all the title elements that have an attribute named lang.
//title[@lang='en'] Selects all the title elements that have a "lang" attribute with a value of "en".
/bookstore/book[price>100] Selects all the book elements of the bookstore element that have a price element with a value greater than 100
/bookstore/book[price>100]/title Selects all the title elements of the book elements of the bookstore element that have a price element with a value greater than 100

Selecting Unknown Nodes

XPath wildcards are used to select unknown XML nodes.

Wildcard Description
* Matches any element node
@* Matches any attribute node
node() Matches any node of any kind

See this in above example:

Path Expression Result
/bookstore/* Selects all the child element nodes of the bookstore element
//* Selects all elements in the document
//title[@*] Selects all title elements which have at least one attribute of any kind

Selecting Several Paths

The | operator is used in XPath expression to select several paths. From the above example, we have listed some path expressions and result of the expressions.

Path Expression Result
//book/title | //book/price Selects all the title and price elements of all book elements
//title | //price Selects all the title and price elements in the document
/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
Related Tutorial
Follow Us
https://www.facebook.com/Rookie-Nerd-638990322793530 https://twitter.com/RookieNerdTutor https://plus.google.com/b/117136517396468545840 #
Contents +