我想了解以下示例
<?xml version="1.0" encoding="UTF-8"?>
<c>
<a>
<b att1="5">
<c/>
</b>
<d/>
</a>
<a att1="10">
<d>
<c/>
</d>
<b/>
</a>
</c>
现在我运行XPath查询
//*[c]
我的意思是“所有有孩子的节点都是c”。但是,这将仅返回具有<b>
子节点的<d>
和<c>
节点,而不会按预期返回Document节点。任何人都可以解释原因吗?
答案 0 :(得分:3)
因为//*
相当于/descendant-or-self::node()/*
。请注意,前一个XPath中self::node()
引用的文档节点,因此该XPath选择的最外层节点将是文档节点的子节点(由于/*
),这是根元素{ {1}},没有直接子c
,因此没有被选中。
您希望c
包含文档节点,该节点等同于/descendant-or-self::node()[c]
,请参阅the demo。