XPath для выбора 1 элемента, если существует один из двух

Я хочу выбрать один элемент, если один из 2 существует при использовании этого для 2 страниц

1-я страница (цена со скидкой)

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

или 2-я страница (только одна цена)

<div class="price">
  8.00
</div>

я использовал //span[@class="originalRetailPrice"] | (//div[@class="priceBlock"])[1] но я получаю цену дважды

что я хочу, это выбрать первую цену, когда это class="originalRetailPrice" или //div[@class="price"]/text()[1]

Итак, наконец, я хочу сделать выбор для работы на обеих страницах

2 ответов


использовать // получить тексты на любом уровне внутри <div class="price">:

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

результат:

Text=''
Text=',990.00'
Text=''

и фильтровать пустые тексты с: 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)]

результат 1-й странице:

Text=',990.00'

результат 2-й странице:

Text='8.00'

можно попробовать так :

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

2-я часть (правая сторона |) выберите div[@class="price"] элемент, только если у него нет дочернего элемента span[@class="originalRetailPrice"].