Hi,
I have a 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" />
<para type="error" position="4" />
<para type="warning" position="5" />
<para type="error" position="6" />
</rec>
<rec id="2">
<para type="warning" position="1" />
<para type="warning" position="2" />
<para type="warning" position="3" />
<para type="warning" position="4" />
<para type="warning" position="5" />
<para type="warning" position="6" />
</rec>
<rec id="3">
<para type="warning" position="1" />
<para type="warning" position="2" />
<para type="warning" position="3" />
<para type="warning" position="4" />
<para type="error" position="5" />
<para type="warning" position="6" />
</rec>
</table>
</xml>
Then copied /descendant::node()/rec/child::node()[1] to the XPath text box. Then press the Test! Button. The XPathtester output:
<?xml version="1.0" encoding="UTF-8"?>
<root></root>
If I change the XPath expression to /descendant::node()/rec/child::*[1] or /descendant::node()/rec/para[1], the output would be:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<para type="error" position="1"/>
<para type="warning" position="1"/>
<para type="warning" position="1"/>
</root>
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] or /descendant::node()/rec/para[1]?
Thanks,
Ming