XPath Introduction
XPath Introduction
Before you continue you should have a basic understanding of the following:
• HTML / XHTML
• XML / XML Namespaces
If you want to study these subjects first, find the tutorials on our Home page.
What is 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 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 is a major element in the XSLT standard. Without XPath knowledge you will not be able to
create XSLT documents.
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.
XPath was designed to be used by XSLT, XPointer and other XML parsing software.
XPath Nodes
In XPath, there are seven kinds of nodes: element, attribute, text, namespace,
processing-instruction, comment, and document (root) nodes.
XPath Terminology
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).
Atomic values
J K. Rowling
"en"
Items
Parent
In the following example; the book element is the parent of the title, author, year, and price:
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
Children
In the following example; the title, author, year, and price elements are all children of the book
element:
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
Siblings
In the following example; the title, author, year, and price elements are all siblings:
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
Ancestors
In the following example; the ancestors of the title element are the book element and the bookstore
element:
<bookstore>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
Descendants
In the following example; descendants of the bookstore element are the book, title, author, year,
and price elements:
<bookstore>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
XPath Syntax
XPath uses path expressions to select nodes or node-sets in an XML document. The node
is selected by following a path or steps.
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:
Expression Description
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:
Predicates
Predicates are used to find a specific node or a node that contains a specific value.
Examples
In the table below we have listed some path expressions with predicates and the result of the
expressions:
Wildcard Description
* 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:
By using the | operator in an XPath expression you can select several paths.
Examples
In the table below we have listed some path expressions and the result of the expressions:
XPath Axes
XPath Axes
AxisName Result
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
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 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)
The syntax for a location step is:
axisname::nodetest[predicate]
Examples
Example Result
child::book Selects all book nodes that are children of the current node
attribute::lang Selects the lang attribute of the current node
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
ancestor::book Selects all book ancestors of the current node
ancestor-or-self::book Selects all book ancestors of the current node - and the
current as well if it is a book node
child::*/child::price Selects all price grandchildren of the current node
XPath Operators
An XPath expression returns either a node-set, a string, a Boolean, or a number.
XPath Operators
XPath Examples
"books.xml":
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:
set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("books.xml")
xmlDoc.selectNodes(path expression)
The following example selects all the book nodes under the bookstore element:
xmlDoc.selectNodes("/bookstore/book")
The following example selects only the first book node under the bookstore element:
xmlDoc.selectNodes("/bookstore/book[0]")
Note: IE5 and later has implemented that [0] should be the first node, but according to the W3C
standard it should have been [1]!!
A Workaround!
To solve the [0] and [1] problem in IE5+, you can set the SelectionLanguage to XPath.
The following example selects only the first book node under the bookstore element:
Try it yourself
The following example selects the text from all the price nodes:
xmlDoc.selectNodes("/bookstore/book/price/text()")
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.
The following example selects all the title nodes with a price higher than 35:
xmlDoc.selectNodes("/bookstore/book[price>35]/title")
This tutorial has taught you how to find information in an XML document.
You have learned how to use XPath to navigate through elements and attributes in an XML
document.
You have also learned how to use some of the standard functions that are built-in in XPath.
The next step is to learn about XSLT, XQuery, XLink, and XPointer.
XSLT
With XSLT you can transform XML documents into other formats, like XHTML.
If you want to learn more about XSLT, please visit our XSLT tutorial.
XQuery
XQuery is designed to query anything that can appear as XML, including databases.
If you want to learn more about XQuery, please visit our XQuery tutorial.
XLink and XPointer define a standard way of creating hyperlinks in XML documents.