2015-06-01 18 views
9

Tôi muốn chọn một yếu tố nếu một trong tổng số 2 tồn tại trong khi sử dụng này cho 2 trangXPath để chọn 1 phần tử nếu một trong hai tồn tại

trang 1 (giá với chiết khấu)

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

hoặc trang thứ 2 (chỉ có một giá)

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

tôi đã sử dụng //span[@class="originalRetailPrice"] | (//div[@class="priceBlock"])[1] nhưng tôi nhận được giá gấp đôi

Những gì tôi muốn là để chọn giá đầu tiên khi nó class="originalRetailPrice" hoặc khi nó //div[@class="price"]/text()[1]

Vì vậy, cuối cùng tôi muốn làm cho sự lựa chọn để làm việc trên cả hai trang

Trả lời

8

Sử dụng // để có được văn bản ở bất kỳ cấp độ bên trong <div class="price">:

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

Kết quả:

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

Và lọc các văn bản trống với: 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)] 

Result trang 1st:

Text='$2,990.00' 

Kết quả 2 page:

Text='$298.00' 
+0

Hoàn hảo, Cảm ơn rất nhiều vì câu trả lời nhanh –

+1

Nếu bạn hoán đổi khối div trong xml thứ nhất, kết quả là không đúng. Nó không phải là câu trả lời – splash58

+0

@ splash58 này '// div [@ class =" price "] [1] // text()' làm việc cho tôi, do đó, một câu trả lời của nó. –

4

Bạn có thể thử cách này:

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

Phần thứ 2 (bên phải |) chọn phần tử div[@class="price"] chỉ khi không có con span[@class="originalRetailPrice"].

+0

Điều này cũng làm việc như một say mê, Cảm ơn :) –

Các vấn đề liên quan