2017-02-16 10 views
-1

Mein HTML sieht wie folgt aus:XPath nur zu wählen, wenn eine Bedingung erfüllt ist

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

(Diese sind in der gleichen Ebene sind, ich meine zweite div nicht ein Kind der ersten div) (beide sie sind die gleichen Niveau Eltern)

ich will wählen href von den inneren Ebenen des ersten div wo class = 'a-row a-spacing-small' nur, wenn etwas in den inneren Ebenen des zweiten div wo class = 'a-row' eine Bedingung erfüllt.

Wie kann ich das tun?

Irgendwelche Ideen

+0

Können Sie detaillierter 'HTML' teilen? Was ist diese Bedingung? – Andersson

Antwort

0

so für Ihre XPath, Sie mit dem Element gestartet werden soll Sie leicht oder die Wurzel identifizieren können, in diesem Fall ist die erste div wo Klasse 'a-row a-spacing-small':

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

Als nächstes wäre zu identifizieren, wie Ihr Element zu diesem Root-Element, so in diesem Fall, möchten Sie eine href, die in einem a wäre und das sollte innerhalb der div wir identifiziert..aber du bist nicht sicher, ob es ein ist direktes Kind. .so Sie verwenden //:

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

aber dann wollen Sie nur dieses Element, wenn die div neben ihm ein condition..so erfüllt sollten wir etwas am Anfang des XPath vor dem XPath setzen wir

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

aber was für XPath hab schon ... erstellt? was wir wissen, ist, dass wir die zweite div die Wurzel machen, da sie die Bedingung, die wir wollen, haben ...

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

so wie funktioniert die ersten div bezieht sich auf unsere neue Wurzel? es ist ein preceding-sibling, weil es vor der neuen Wurzel ist, und es ist auf dem gleichen Niveau ..

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

jetzt, was die Bedingung ist, müssen wir es in der Wurzel gehören ...

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

Beispiele:

, wenn die Bedingung ist, dass die div Benutzer a mit dem Text "bedingten Link" haben sollte: //div[@class='a-row' and .//a[text()='conditional link']]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

, wenn die Bedingung ist, dass die div ein behindertes Attribut haben sollte: //div[@class='a-row' and @disabled]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

wie etwa ohne disabled-Attribut? //div[@class='a-row' and not(@disabled)]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

spielen mit ihm ...

+0

natürlich sollten Sie auch identifizieren, welche 'href' Sie anstreben..wie ist es in einem' a', das den Text "this link" hat? in diesem Fall: '// div [@ class = 'a-row' und nicht (@disabled)]/previous-sibling :: div [@ class = 'a-Reihe a-spacing-small'] // a [ text() = 'this link']/@ href' – becixb

+0

Vielen Dank! Begeistert, dies zu implementieren =) –

Verwandte Themen