2017-02-16 51 views
-1

我的HTML看起来像这样:如何选择XPath只有当条件满足

div class = 'a-row a-spacing-small' 
div class = 'a-row' 

(这些都是在同一水平线上,我的意思是第二个div是不是第一个div的孩子)(两者的他们是同一级别的父母)

我想从第一div的内部级别选择href其中class = 'a-row a-spacing-small'只有某些东西在第二个div的内部级别,其中class = 'a-row'满足的条件。

我该怎么做?

任何想法

+0

你可以分享更详细的HTML吗?这种情况是什么? – Andersson

回答

0

所以对于你的XPath,要与你能轻易的元素或根开始,在这种情况下,第一div其中类是'a-row a-spacing-small'

//div[@class='a-row a-spacing-small']

下一个将是确定你的元素如何与这个根元素,所以在这种情况下,你想要一个href这将是一个a这应该是我们里面的identified..but你div不确定它是否是一个直接的孩子。 。所以你用//

//div[@class='a-row a-spacing-small']//a/@href

但你只想要这个元素,如果div旁边满足condition..so我们应该把东西在XPath的开始,我们的”前的XPath VE已经创建...

//<somexpath>/div[@class='a-row a-spacing-small']//a/@href

但什么的XPath?我们知道什么是我们正在做的第二div根,因为它有我们想要的状态...

//div[@class='a-row']

那么,如何第一div涉及到我们的新的根?这是一个preceding-sibling,因为它是新的根之前,它是在同一水平..

//div[@class='a-row']/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

现在无论条件是,我们需要把它列入根...

//div[@class='a-row' and <condition>]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

例子:

如果条件是DIV应该有一个a文本“有条件的链接”: //div[@class='a-row' and .//a[text()='conditional link']]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

如果条件是DIV应该有一个禁用的属性: //div[@class='a-row' and @disabled]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

怎么样也没有残疾人属性? //div[@class='a-row' and not(@disabled)]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

发挥它...

+0

当然你也应该确定你后面的'href'类似于'a'中是否有文字“这个链接”?在这种情况下:'// div [@ class ='a-row'and not(@disabled)]/preceding-sibling :: div [@ class ='a-row a-spacing-small'] // a [ text()='此链接']/@ href' – becixb

+0

非常感谢!兴奋地执行这个=) –