Xpath有多个谓词语句

时间:2014-09-04 16:13:03

标签: xpath predicate

我环顾四周,似乎无法找到答案。 非常简化:

<a>
  <b>
     <div class=label>
     <label="here"/>
     </div>
  </b>
  <div id="something">
     <b>
        <div class=label>
           <label="here"/>
        </div>
  </div>
</a>

所以我试图抓住第二个“这里”标签。我想做的是做id到达“某事”部分

//.[@id="something”]

然后从那一点开始搜索带有类似

的标签
//.[@class="label" and label="here"]

但是,通过阅读其他一些回复,它似乎不像

//.[@id="something”][@class="label" and label="here"]

工作,我只是想知道我是否只是错过了它的工作原理?我知道我可以通过另一种方法简单地得到上述内容,这只是一个例子,询问如何在彼此之后执行两个谓词语句(如果它确实可行)。 谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你需要这样的东西:

//.[@id="something”]//.[@class="label" and label="here"]

关键是//意味着:从当前节点中选择与选择匹配的文档中的节点,无论它们在何处 参考:http://www.w3schools.com/xpath/xpath_syntax.asp

答案 1 :(得分:1)

语法//*[@x='y']//.[@x='y']更惯用,可能是因为它在XPath 1.0和XPath 2.0中都有效,而后者仅在XPath 2.0中允许。在&#34;。&#34;之后不允许谓词。可能是XPath 1.0中的意外限制,我认为某些实现可能放宽了限制,但它在规范中有:谓词只能遵循NodeTest或PrimaryExpr,并且&#34;。& #34;既不是。

在XPath 2.0中,//*选择树中的所有元素节点,而//.选择所有类型的所有节点(包括文档根节点),但在此示例中效果是相同的,因为谓词[@x='y']只能与元素节点匹配(对于所有其他节点类型,@x不选择任何内容,因此不能等于任何东西)。