Important:
This is retired content. This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This content may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.
A version of this page is also available for
4/8/2010

XML Path Language (XPath) expressions are constructed using the operators and special characters shown in the following table.

Operator Meaning

/

Child operator; selects immediate children of the left-side collection. When this path operator appears at the start of the pattern, it indicates that children should be selected from the root node.

//

Recursive descent; searches for the specified element at any depth. When this path operator appears at the start of the pattern, it indicates recursive descent from the root node.

.

Indicates the current context.

*

Wildcard; selects all elements regardless of the element name.

@

Attribute; prefix for an attribute name.

@

Attribute wildcard; selects all attributes regardless of name.

:

Name space separator; separates the name space prefix from the element or attribute name.

( )

Groups operations to explicitly establish precedence.

[ ]

Applies a filter pattern.

[ ]

Subscript operator; used for indexing within a collection.

+

Performs addition.

-

Performs subtraction.

div

Performs floating-point division according to IEEE 754.

*

Performs multiplication.

mod

Returns the remainder from a truncating division.

This table does not list Boolean, Comparison, and Set Expressionsor Set Operations.

Precedence order (from highest precedence to lowest) is defined as indicated in the following table.

Operator Meaning

( )

Grouping

[ ]

Filters

/ //

Path operations

Note that the filter pattern operators (the brackets) have a higher precedence than the path operators (the slash characters). For example, the expression "//comment()[3]" is interpreted as "//(comment()[3])", and selects all comments with an index equal to 3 relative to the comment's parent anywhere in the document. This differs from the expression "(//comment())[3]", which selects the third comment from the set of all comments relative to the parent. The first expression can return more than one comment, while the latter can return only one comment.

These operators and special characters are described in detail throughout this reference.

Path Operators

The collection of elements of a certain type can be determined using the path operators (/ and //). These operators take as their arguments a "left side" collection on which to perform the selection and a "right side" collection indicating which elements to select. The child operator (/) selects from immediate children of the left-side collection, while the descendant operator (//) selects from arbitrary descendants of the left-side collection. In effect, // can be considered a substitute for one or more levels of hierarchy.

Note that the path operators change the context as the query is performed. By stringing path operators together, users can traverse the document tree.

Examples

Find all first-name elements within an author element. Note that the author children of the current context are found, and then first-name children are found, relative to the context of the author elements.

Copy Code
author/first-name

Find all title elements one or more levels deep in the bookstore (arbitrary descendants).

Copy Code
bookstore//title

Note that this is different from the following pattern, which finds all title elements that are grandchildren of bookstore elements.

Copy Code
bookstore/*/title

Find emph elements anywhere inside book excerpts, anywhere inside the bookstore.

Copy Code
bookstore//book/excerpt//emph

Find all titles one or more levels deep in the current context. Note that this situation is essentially the only one in which the period notation is required.

Copy Code
.//title

Wildcard Character

An element can be referenced without using its name by substituting the wildcard (*) collection. The * collection returns all elements that are children of the current context, regardless of the tag name.

Examples

Find all element children of author elements.

Copy Code
author/*

Find all last names that are grandchildren of books.

Copy Code
book/*/last-name

Find the grandchildren elements of the current context.

Copy Code
*/*

Find the book element from the "my" name space.

Copy Code
my:book

Find all elements from the "my" name space.

Copy Code
my:*

Note that the pattern "*:book" is not supported.

Attributes

XPath denotes attribute names with the @ symbol. Attributes and child elements are treated impartially, and capabilities are equivalent between the two types wherever possible.

Note:
Attributes cannot contain child elements, so syntax errors occur when path operators are applied to attributes. In addition, you cannot apply an index to attributes because, by definition, no order is defined for attributes.

Examples

Find the styleattribute of the current element context.

Copy Code
@style

Find the exchangeattribute on price elements within the current context.

Copy Code
price/@exchange

The following example is not valid.

Copy Code
price/@exchange/total

Find the styleattribute for all book elements.

Copy Code
book/@style

Finding Multiple Attributes

All attributes of an element can be returned using @*. This is potentially useful for applications that treat attributes as fields in a record.

Note that the pattern "@*:title" is not supported.

Examples

Find all attributes of the current element context.

Copy Code
@*

Find all attributes from the "my" name space. This does not include unqualified attributes on elements from the "my" name space.

Copy Code
@my:*

See Also