Categories
XSL XSL Languages

XPath

You have to know XPath, in order to understand XSLT. XPath is the language used for searching through an XML source document, and finding & copying pieces of information (node sets). XPath uses RegEx-like expressions for extracting data from an XML source.

Selecting Nodes

See: http://www.w3schools.com/xpath/xpath_syntax.asp

nodename Selects all nodes with the name “nodename”. / 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.

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. //@lang Selects all attributes that are named lang

XPath Predicates

Used to find specific nodes.

Predicates always appear inside brackets “[]”.

/bookstore/book[1] Selects the first book element that is the child of the bookstore element. /bookstore/book[last()] Selects the last book element that is the child of the bookstore element

Selecting Unknown Nodes

These are the XPath wildcards.

\* Matches any element node. @* Matches any attribute node. node() Matches any node of any kind.

/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. You use the | operator to combine XPath expressions.

Note: In XPath, you use the “OR” operator for AND’ing (sort of like bitwise OR’ing is actually AND’ing.).

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

Notes

You might get tripped-up by the use of the OR operator. The “Logical OR” operator “|” and the work “or” (as used in Axes definitions (like “parent or self”) are used to include more paths in the selection. OR means “Either case matches”. There really is no use for AND in matching paths!

XPath Axes

An XPath Axis specifies the tree-relationship between the selected nodes and the current node.

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 all nodes that appear before the current node in the document, except ancestors, attribute nodes and namespace nodes. 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.

Each step is evaluated against the nodes in the current node-set.

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:

Absolute
/step/step/...
Relative
step/step/...
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).
Location Step Syntax

axisname::nodetest[predicate]

Path Expression Example Description
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 element children of the current node.
attribute::* Selects all attributes of the current node.
child::text() Selects all text node children of the current node.
child::node() Selects all children 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
  • string
  • Boolean
  • number
Symbol Meaning Example Result
  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

Leave a Reply