2014-09-04 64 views
1

我环顾四周,似乎无法找到答案。 非常简单:Xpath有多个谓词语句

<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

'

+0

是的,它不是真实的数据,只是一个例子来说明:) – Th3sandm4n 2014-09-04 16:25:47

回答

1

我认为你需要这样的事情,而不是:

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

的一点是,//意味着:选择节点从不管匹配的选择是,他们是 裁判当前节点的文件中: http://www.w3schools.com/xpath/xpath_syntax.asp

+1

啊好吧,它看起来像答案是://.[@id="add-schema-property-modal"////[[class=“ o-form-label“和label =”变量名称“] 与”//“。从当前节点中选择节点。我会尽快接受(需要2分钟的延迟) – Th3sandm4n 2014-09-04 16:26:02

1

语法//*[@x='y']//.[@x='y']更惯用,可能是因为它在XPath 1.0和XPath 2.0中均有效,而后者只允许在XPath 2.0中使用。在“。”之后禁止谓词。可能是XPath 1.0中的一个意外限制,我认为一些实现可能已经放宽了限制,但它在规范中存在:谓词只能跟随NodeTest或PrimaryExpr,并且“。”既不是。

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

+0

是的,我遇到了这个问题,解释了硒是如何解释xpaths的! – Th3sandm4n 2014-09-05 21:46:24