Search code examples
xpathnodesets

Is this XPath technique reliable in all situations?


I am developing an application that accepts user-defined XPath expressions and employs them as part of its runtime operation.

However, I would like to be able to infer some additional data by programmatically manipulating the expression, and I am curious to know whether there are any situations in which this approach might fail.

Given any user-defined XPath expression that returns a node set, is it safe to wrap it in the XPath count() function to determine the number of nodes in the set:

count(user_defined_expression)

Similarly, is it safe to append an array index to the expression to extract one of the nodes in the set:

user_defined_expression[1]

Solution

  • Well an XPath expression (in XPath 1.0) can yield a node-set or a string or a number or a boolean and doing count(expression) only makes sense on any expression yielding a node-set.

    As for adding a positional predicate, I think you might want to use parentheses around your expression i.e. to change /root/foo/bar into (/root/foo/bar)[1] as that way you select the first bar element in the node-set selected by /root/foo/bar while without them you would get /root/foo/bar[1] which would select the first bar child element of any foo child element of the root element.