2015-06-01 15 views
9

voglio selezionare un elemento, se uno su 2 esistono durante l'utilizzo di questo per 2 pagineXPath per selezionare 1 elemento se uno dei due esiste

prima pagina (prezzo scontato)

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

o 2 ° pagina (un solo prezzo)

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

ho usato //span[@class="originalRetailPrice"] | (//div[@class="priceBlock"])[1] ma ottengo il prezzo due volte

Quello che voglio è quello di selezionare il primo prezzo quando è class="originalRetailPrice" o quando è //div[@class="price"]/text()[1]

Così alla fine voglio fare la scelta di lavorare su entrambe le pagine

risposta

8

Utilizzare // per ottenere testi a qualsiasi livello all'interno <div class="price">:

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

Risultato:

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

e filtrare i testi vuoti con: 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)] 

Risultato prima pagina:

Text='$2,990.00' 

Risultato 2 ° pagina:

Text='$298.00' 
+0

Perfetto, Grazie mille per la risposta veloce –

+1

Se si cambia il blocco div in 1 xml, il risultato sarà errato. Non è la risposta – splash58

+0

@ splash58 questo '// div [@ class =" price "] [1] // text()' ha funzionato per me, quindi è una risposta. –

4

Si può provare in questo modo:

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

La seconda parte (lato destro di |) seleziona l'elemento div[@class="price"] solo se non ha il figlio span[@class="originalRetailPrice"].

+0

Anche questo ha funzionato come un fascino, grazie :) –

Problemi correlati