What is the XPath to select a range of nodes?
I have an XML file that's structured like this:
<foo>
<bar></bar>
<bar></bar>
...
</foo>
I don't know how to grab a range of nodes. Could someone give me an example of an XPath expression that grabs bar nodes 100-200?
Use:
/*/bar[position() >= 100 and not(position() > 200)]
Do note:
-
Exactly the
bar
elements at position 100 to 200 (inclusive) are selected. -
The evaluation of this XPath expressions can be many times faster than an expression using the
//
abbreviation, because the latter causes a complete scan of the tree whose root is the context node. Always try to avoid using the//
abbreviation in cases when this is possible.
//foo/bar[100 <= position() and position() < 200]
Isn't fn:subsequence
the best way?
subsequence( /foo/bar, 100, 101 )
returns all items from position 100 through 200, that is 101 items (or less if the source sequence is shorter).