Thank you Liam, I have got the point.
Modifing the XML file as follows:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<table>
<rec id="1"><para type="error" position="1"/>
<para type="error" position="2"/>
<para type="error" position="3"/>
</rec>
<rec id="2"><para type="warning" position="1"/>
<para type="warning" position="2"/>
<para type="warning" position="3"/>
</rec>
<rec id="3"><para type="info" position="1"/>
<para type="info" position="2"/>
<para type="info" position="3"/>
</rec>
</table>
</xml>
can get the expected outputs.
Thanks,
Ming
________________________________
From: Liam R E Quin <[email protected]>
To: Ming Chen <[email protected]>
Cc: "[email protected]" <[email protected]>
Sent: Tuesday, January 10, 2012 11:22 AM
Subject: Re: [xml] Does not support the expression :
/descendant::node()/rec/child::node()[1]?
On Mon, 2012-01-09 at 18:54 -0800, Ming Chen wrote:
> According to the XPath spec (V2.0 section 3.2.3 Unabbreviated
> Syntax) : child::node() selects all the children of the context node. Note
> that no attribute nodes are returned, because attributes are not
> children.
Note, libxml2 actually only supports XPath 1, not XPath 2.
However,
/descendant::node()/rec/child::node()[1]
will match text nodes, and you're getting the blank (whitespace-only)
text node that's the first child of elements, since your input is
"indented".
> Shouldn’t it have the same output as
> /descendant::node()/rec/child::*[1] and /descendant::node()/rec/para[1]?
No.
The first child node in
<rec id="1">
<para type="error" position="1"/>
is the newline and spaces between id="1"> and <para.
Liam
--
Liam Quin - XML Activity Lead, W3C, http://www.w3.org/People/Quin/
Pictures from old books: http://fromoldbooks.org/
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml