2015-06-01 24 views
9

Chcę wybrać jeden element, jeśli jeden z 2 występują podczas korzystania z tego na 2 stronachXPath do wybierz 1 element, jeśli jeden z dwóch istnieje

1 stronie (cena promocyjna)

<div class="price"> 
    <span class="originalRetailPrice">$2,990.00</span> 
    </div> 
</div> 
<div class="price"> 
     <span class="salePrice">$1,794.00</span> 
</div> 

lub 2 strona (tylko jedna cena)

<div class="price"> 
    $298.00 
</div> 

Użyłem //span[@class="originalRetailPrice"] | (//div[@class="priceBlock"])[1] ale uzyskać cenę dwukrotnie

Co chcę jest, aby wybrać pierwszą cenę kiedy to class="originalRetailPrice" lub gdy jest //div[@class="price"]/text()[1]

Więc w końcu chcę, aby dokonać wyboru, aby pracować po obu stronach

Odpowiedz

8

użytkowania // aby teksty na dowolnym poziomie wewnątrz <div class="price">:

//div[@class="price"][1]//text() 

Wynik:

Text='' 
Text='$2,990.00' 
Text='' 

i filtrowanie pustych tekstów z: text()[normalize-space() and not(ancestor::a | ancestor::script | ancestor::style)]

//div[@class="price"][1]//text()[normalize-space() and not(ancestor::a | ancestor::script | ancestor::style)] 

Wynik 1 stronie:

Text='$2,990.00' 

Wynik 2 strona:

Text='$298.00' 
+0

Perfect, Wielkie dzięki za szybką odpowiedź –

+1

Jeśli zamienisz blok div w 1 xml, wynik będzie błędny. To nie jest odpowiedź. – splash58

+0

@ splash58 to '// div [@ class =" price "] [1] // text()' działało dla mnie, więc jest to odpowiedź. –

4

można spróbować w ten sposób:

//span[@class="originalRetailPrice"] | //div[@class="price" and not(span[@class="originalRetailPrice"])]/text()[1] 

Druga część (prawa strona |) wybierz element div[@class="price"] tylko wtedy, gdy nie ma dziecka span[@class="originalRetailPrice"].

+0

To również działało jak wdzięk, dzięki :) –

Powiązane problemy