0% found this document useful (0 votes)
129 views12 pages

XPath Introduction

This document provides an introduction and overview of XPath: - XPath is a language for finding information in an XML document by navigating through elements and attributes. It uses path expressions to select nodes or node-sets. - XPath includes over 100 built-in functions and is a major element of XSLT. It is also used in XQuery and XPointer. - XPath became a W3C standard in 1999 and was designed to be used by XSLT, XPointer and other XML parsing software.

Uploaded by

api-3716512
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
129 views12 pages

XPath Introduction

This document provides an introduction and overview of XPath: - XPath is a language for finding information in an XML document by navigating through elements and attributes. It uses path expressions to select nodes or node-sets. - XPath includes over 100 built-in functions and is a major element of XSLT. It is also used in XQuery and XPointer. - XPath became a W3C standard in 1999 and was designed to be used by XSLT, XPointer and other XML parsing software.

Uploaded by

api-3716512
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 12

XPath Introduction

XPath is a language for finding information in an XML document. XPath is used to


navigate through elements and attributes in an XML document.

What You Should Already Know

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 is a syntax for defining parts of an XML document


• XPath uses path expressions to navigate in XML documents
• XPath contains a library of standard functions
• XPath is a major element in XSLT
• XPath is a W3C Standard

XPath Path Expressions

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 Standard Functions

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 Used in XSLT

XPath is a major element in the XSLT standard. Without XPath knowledge you will not be able to
create XSLT documents.

You can read more about XSLT in our XSLT tutorial.

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.

You can read more about XQuery in our XQuery tutorial.


XPath is a W3C Standard

XPath became a W3C Recommendation 16. November 1999.

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

Look at the following XML document:

<?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:

<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>
<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.

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

Nodes that have the same parent.

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

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:

<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>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.

The XML Example Document

We will use the following XML document in the examples below.

<?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:

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:

Path Expression Result


bookstore Selects all the child nodes of the bookstore element
/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.

Examples

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

Path Expression Result


/bookstore/book[0] Selects the first book element that is the child of
the bookstore element.

Note: IE5 and later has implemented that [0]


should be the first node, but according to the W3C
standard it should have been [1]!!
/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='eng'] Selects all the title elements that have an attribute
named lang with a value of 'eng'
/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
/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

Selecting Unknown Nodes

XPath wildcards can be used to select unknown XML elements.

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:

Path Expression Result


/bookstore/* Selects all the child nodes of the bookstore element
//* Selects all elements in the document
//title[@*] Selects all title elements which have any attribute

Selecting Several Paths

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:

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

XPath Axes

The XML Example Document

We will use the following XML document in the examples below.

<?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

An axis defines a node-set relative to the current node.

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

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

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 Examples

The XML Example Document

We will use the following XML document in the examples below.

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

View the "books.xml" file in your browser.

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)

Select all book Nodes

The following example selects all the book nodes under the bookstore element:

xmlDoc.selectNodes("/bookstore/book")

If you have IE 5 or higher you can try it yourself.

Select the First book Node

The following example selects only the first book node under the bookstore element:

xmlDoc.selectNodes("/bookstore/book[0]")

If you have IE 5 or higher you can try it yourself

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:

xmlDoc.setProperty "SelectionLanguage", "XPath"


xmlDoc.selectNodes("/bookstore/book[1]")

Try it yourself

Select the prices

The following example selects the text from all the price nodes:

xmlDoc.selectNodes("/bookstore/book/price/text()")

If you have IE 5 or higher you can try it yourself.

Selecting price Nodes with Price>35

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.

Selecting title Nodes with Price>35

The following example selects all the title nodes with a price higher than 35:

xmlDoc.selectNodes("/bookstore/book[price>35]/title")

If you have IE 5 or higher you can try it yourself.

You Have Learned XPath, Now What?


XPath Summary

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.

For more information on XPath, please look at our XPath Reference.

Now You Know XPath, What's Next?

The next step is to learn about XSLT, XQuery, XLink, and XPointer.

XSLT

XSLT is the style sheet language for XML files.

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 about querying XML data.

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

Linking in XML is divided into two parts: XLink and XPointer.

XLink and XPointer define a standard way of creating hyperlinks in XML documents.

You might also like