为什么不//返回文档节点?

时间:2017-04-24 11:13:50

标签: xpath

我想了解以下示例

<?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节点。任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:3)

因为//*相当于/descendant-or-self::node()/*。请注意,前一个XPath中self::node()引用的文档节点,因此该XPath选择的最外层节点将是文档节点的子节点(由于/*),这是根元素{ {1}},没有直接子c,因此没有被选中。

您希望c包含文档节点,该节点等同于/descendant-or-self::node()[c],请参阅the demo