If I have XML like:
<foo>
<bar id="1" score="192" />
<bar id="2" score="227" />
<bar id="3" score="105" />
...
</foo>
Can I use XPath to find the minimum and maximum values of score
?
Edit: The tool i'm using (Andariel ant tasks) doesn't support the XPath 2.0 solution.
Turns out the tool does not support XPath 2.0.
XPath 1.0 doesn't have the fancy min()
and max()
functions, so to find these values we need to be a little tricky with the XPath logic, and compare the values on the siblings of the node:
Maximum:
/foo/bar[not(preceding-sibling::bar/@score >= @score)
and not(following-sibling::bar/@score > @score)]/@score
Minimum:
/foo/bar[not(preceding-sibling::bar/@score <= @score)
and not(following-sibling::bar/@score < @score)]/@score
If embedding these queries in XML files like XSLT or ant scripts, remember to encode <
and >
as <
respecting >
.