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.
<?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>
Path expressions used for selecting nodes are:
|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|
See the path expressions and their details in the above example:
|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 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:
|/bookstore/book||Selects the first book element that is the child of the bookstore element. Note: In IE 5,6,7,8,9 first node is, but according to W3C, it is . To solve this problem in IE, set the selectionlanguage to 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|
XPath wildcards are used to select unknown XML nodes.
|*||Matches any element node|
|@*||Matches any attribute node|
|node()||Matches any node of any kind|
See this in above example:
|/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|
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.
|//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|