On Mon, Nov 05, 2012 at 04:49:49PM +0000, Alex Bligh wrote:
> I am seeing a difference between command line xpath under linux and libxml. I 
> am wondering which is right.
> 
> If I have a tree like this:
> 
> <foo>
>   <bar id='0'>
>    <baz>0</baz>
>    <bip>it is zero</bip>
>   </bar>
>   <bar id='1'>
>    <baz>1</baz>
>    <bip>it is one</bip>
>   </bar>
>   <bar id='2'>
>    <bip>no baz element</bip>
>   </bar>
> </foo>
> 
> Now if I run xpath, I see:
> 
> $ xpath -e '//foo/bar[baz=1]/bip' < test.xml
> Found 1 nodes in stdin:
> -- NODE --
> <bip>it is one</bip>
> 
> $ xpath -e '//foo/bar[baz!=1]/bip' < test.xml
> Found 2 nodes in stdin:
> -- NODE --
> <bip>it is zero</bip>
> -- NODE --
> <bip>no baz element</bip>
> 
> That's what I'd expect.
> 
> However, libxml's xpath appears to not find the second match (where there is 
> no 'baz') element on the second xpath query. Which is right?

  The spec, just the spec, use it, it's free :-)

http://www.w3.org/TR/xpath/#booleans

"If one object to be compared is a node-set and the other is a number,
then the comparison will be true if and only if there is a node in the
node-set such that the result of performing the comparison on the number
to be compared and on the result of converting the string-value of that
node to a number using the number function is true."

 In the document on the last bar, the node set "baz" is empty. The
comparison operator is '!='.
But there can't be a node in that set where the cast would be true
so the test has to fail, and the last bar child must not be selected.

 So clearly /usr/bin/xpath which is apparently coming from Perl
has a bug. Be careful with comparison operators on XPath node sets
they don't alway obbey to standard expectation.

  Assuming I look right, lease report the bug to Perl :-)

Daniel

-- 
Daniel Veillard      | Open Source and Standards, Red Hat
[email protected]  | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | virtualization library  http://libvirt.org/
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to