2017-02-16 5 views
-1

私のHTMLは次のようになります。は、条件が満たされた場合にのみ、XPathを選択する方法

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

(これらは、私は2番目のdivは、最初のdivの子ではないという意味で、同じレベルにある)(両方の彼らは

)同じレベルの親である私はclass = 'a-row a-spacing-small'のみclass = 'a-row'が条件を満たして第二のdivの内側のレベルで何かあれば最初divの内側のレベルからhrefを選択したいです。

どうすればいいですか?

あなたのxpathのように任意のアイデア

+0

詳細な「HTML」を共有できますか?この状態は何ですか? – Andersson

答えて

0

は、あなたが、この場合には、あなたが簡単に識別できる要素またはルートを持つクラスが'a-row a-spacing-small'である第一divを開始したい:

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

次に、あなたの要素がこのルート要素にどのように関連しているかを特定することになります。この場合、hrefaにあり、それがdiv内にあるはずです。しかし、それが直接の子供。

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

が、その後あなただけの横にdivはcondition..soを満たしていれば、私たちは「XPathの前のXPathの開始時に何かを置く必要があり、この要素をしたい:.soはあなたが//使用しますすでに...

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

が、どのようなXPathを作成しましたか?それは私たちが望む条件を持っているので、私たちが知っていることはので、どのように最初のdivは、私たちの新しいルートに関係ない

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

...、私たちは根二divを作っているのですか?それは新しいルートの前であり、それは同じレベルにあるので...

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

preceding-siblingで、今の状態が何であれ、我々はルートに含める必要があります...

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

例: :

条件はdiv要素は、テキスト「条件付きリンク」とaを持つべきであるということであれば無disabled属性について //div[@class='a-row' and @disabled]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

方法:

条件は、div要素がdisabled属性を持たなければならないということですか? //div[@class='a-row' and not(@disabled)]/preceding-sibling::div[@class='a-row a-spacing-small']//a/@href

再生する

+0

もちろん 'href'の後にあなたは' 'このリンク ''というテキストを持つ' a'の中にあるのでしょうか?その場合は、次のようになります。/ preceding-sibling :: div [@ class = 'a-row a-spacing-small'] // a [ text()= 'このリンク']/@ href' – becixb

+0

ありがとうございます!これを実現するために興奮=) –

関連する問題