XPath中的不同*选择策略

  • 本文关键字:选择 策略 XPath xml xpath
  • 更新时间 :
  • 英文 :


以下基于某些标准的文档目标叶节点方法之间有什么区别?

<!-- using //* -->
//*[contains(@class, "w4")]       
<!-- using //node() -->
//node()[contains(@class, "w4")]
<!-- using //. -->
//.[contains(@class, "w4")]

这三个"工作"都是为了在一些示例xml中选择相同的节点,所以我想知道如果它们之间有任何区别,如果它们都相同,这是首选的(还有为什么我不能将//[contains(@class, "w4")]与空节点一起使用,//不是意味着根节点的任何位置吗?(。

//*选择文档中的所有元素。

//node()还选择其他类型的节点(注释、文本节点等(,但只有元素才能匹配查找属性的谓词,因此它最终是等价的。

//.非常独特,可能是因为它只在XPath2.0+中工作,不会做任何其他方式无法做的事情。我不得不思考它到底意味着什么。它扩展到/descendant-or-self::node()/.,相当于在末尾省略了/.,这意味着与//node()的唯一区别是它还选择了根文档节点。但是,这不会有任何属性,所以它不会通过测试@class的谓词。

底线是,在这个谓词存在的情况下,它们都做同样的事情。

人们尝试//[predicate]的频率之高令人惊讶,但这完全不符合语法。CCD_ 10本身就像在说";选择";不说你想选择什么;这是一个未完成的句子。如果你还没有说你想选择什么,那么选择其中的一个子集是没有意义的

最新更新