[
Lists Home |
Date Index |
Thread Index
]
Suzan Foster wrote:
> Taking the following XML:
>
> <foo>
> <bar id="1" />
> <bar id="2" />
> <bar id="3" />
> <fu />
> </foo>
>
> which value should be returned by the xpath:
>
> preceding::bar[1]/@id
>
> libxslt says 3, whilst XML::XPath says 1.
>
> groetjes, su.
You have already gotten two correct answers. Here is some additional
information.
This example is lifted almost directly from the XPath 1.0 standard
(http://www.w3.org/TR/xpath#node-sets), which tells you that the value
of preceding::bar[1] is the first preceding bar element in reverse
document order. Assuming the initial context in your example is the fu
element, the value of preceding::bar[1]/@id should be 3. If the context
were <bar id="2"/> the value would be 1. Etc.
In XPath 2.0, preceding is defined to return its results in document
order. So, starting from the fu element, libxslt is right or wrong,
depending on whether it is following XPath 1.0 or 2.0 rules, respectively.
Bob Foster
http://xmlbuddy.com/
|