The XPath specification defines thirteen different axes; each axis
contains various nodes. The nodes that are in a given axis depend
on the context node. All 13 axes, excerpted from our more involved
discussion in Section 3.1 in Chapter 3, are listed here.
child
axis
Contains the children of the context node. As we've already mentioned, the XPath expressions
child::lines/child::line
and
lines/line
are equivalent. If an XPath expression (such as
/sonnet
) doesn't have an axis specifier, the
child
axis is used by default.
parent
axis
Contains the parent of the context node, if there is one. (If the context node is the root node, the parent axis returns an empty node-set.) This axis can be abbreviated with a double period (
..
). The expressions
parent::sonnet
and
../sonnet
are equivalent. If the context node does not have a
<
sonnet
>
element as its parent, these XPath expressions return an empty node-set.
self
axis
Contains the context node itself. The
self
axis can be abbreviated with a single period (
.
).
attribute
axis
Contains the attributes of the context node. If the context node is not an element node, this axis is empty. The
attribute
axis can be abbreviated with the at sign (
@
). The expressions
attribute::type
and
@type
are equivalent.
ancestor
axis
Contains the parent of the context node, the parent's parent, and so on. The
ancestor
axis always contains the root node, unless the context node is the root node.
ancestor-or-self
axis
Contains the context node, its parent, its parent's parent, and so on. This axis always includes the root node.
descendant
axis
Contains all children of the context node, all children of all the children of the context node, and so on. Be aware that the
descendant
axis does not include any attribute or namespace nodes. (As we discussed earlier, an attribute node has an element node as its parent, even though the attribute node is not considered a child of its parent.)
descendant-or-self
axis
Contains the context node and all children of the context node, all children of all the children of the context node, and so on.
preceding-sibling
axis
Contains all of the preceding siblings of the context node—in other words, all nodes that have the same parent as the context node and appear before the context node in the XML document. If the context node is an attribute node or a namespace node, the
preceding-sibling
axis is empty.
following-sibling
axis
Contains all of the following siblings of the context node—in other words, all nodes that have the same parent as the context node and appear after the context node in the XML document. If the context node is an attribute node or a namespace node, the
following-sibling
axis is empty.
preceding
axis
Contains all nodes that appear before the context node in the document, except any ancestors, attribute nodes, and namespace nodes.
following
axis
Contains all nodes that appear after the context node in the document, except any descendants, attribute nodes, and namespace nodes.
namespace
axis
Contains the namespace nodes of the context node. If the context node is not an element node, this axis is empty.
The five axes ancestor, descendant, following, preceding, and self partition everything in the XML document (with the exception of any attribute or namespace nodes). Any node in the XPath tree appears in one of these five axes, and the five axes do not overlap.