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?
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.
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).
To select range, you must use position(), and use the clause 'and'. I'm going write two ways:
//foo//bar[position() >= 100 and position() <= 200]
or
//foo//bar[position() >= 100][position() <= 200]