我环顾四周,似乎无法找到答案。 非常简化:
<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"]
工作,我只是想知道我是否只是错过了它的工作原理?我知道我可以通过另一种方法简单地得到上述内容,这只是一个例子,询问如何在彼此之后执行两个谓词语句(如果它确实可行)。 谢谢!
答案 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
不选择任何内容,因此不能等于任何东西)。