<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>
Appling command line "xmllint.exe --xpath /descendant::node()/rec/child::node()[1] test.xml", the output are several empty lines.
If I change the XPath _expression_ to
/descendant::node()/rec/child::*[1] or /descendant::node()/rec/para[1], the output would be:
<para type="error" position="1"/><para type="warning" position="1"/><para type="info" position="1"/>
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.
Shouldnât it have the same output as
/descendant::node()/rec/child::*[1] and /descendant::node()/rec/para[1]?
As for the tools that I used: (Win32 version from
http://www.zlatkovic.com/libxml.en.html)
libxml2-2.7.8.win32 (depends on iconv-1.9.2.win32 and zlib-1.2.5.win32). A xmllint.exe tool has been included in the "bin" directory.