Predicates

In general, an XPath expression may refer to more than one node. Sometimes this is what you want, but sometimes you want to further winnow the node-set. You want to select only some of the nodes the expression returns. Each step in a location path may (but does not have to) have a predicate that selects from the node-set current at that step in the expression. The predicate contains a Boolean expression, which is tested for each node in the context node list. If the expression is false, then that node is deleted from the list. Otherwise, it’s retained.

For example, suppose you want to find all profession elements whose value is “physicist”. The XPath expression //profession[. = "physicist"] does this. You can use single quotes around the string instead of double quotes, which is often useful when the XPath expression appears inside a double-quoted attribute value, for example, <xsl:apply-templates select="//profession[.= 'physicist']" />.

If you want to ask for all person elements that have a profession child element with the value “physicist”, you’d use the XPath expression //person [profession="physicist"]. If you want to find the person element with id p4567, put an @ in front of the name of the attribute, as in //person[@id="p4567"].

In addition to the equals sign, XPath supports a full complement of relational operators, including <, >, >=, <=, and !=. For instance, the expression //person [@born<=1976] locates all person elements in the document with a born attribute ...

Get XML in a Nutshell, 3rd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.