Строковая функция XPath для нескольких результатов? - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть следующий пример кода HTML.Моя цель - обратиться к ценам с помощью XPath:

<div class="product-price">
    <div class="Price">
        <span class="value">9,99 €</span>
    </div>
</div>
.
.
.
<div class="product-price">
    <div class="Price">
        <span class="value">4,99 €</span>
    </div>
</div>

Я пробовал следующее выражение XPATH:

*//div[@class="product-price"]/span[@class="value"]/text()

или

*//div[@class="product-price"]/span[@class="value"]

Результат:

9,99 €
4,99 €

Пока все хорошо.Теперь мне нужно получить результат без знака валюты , а десятичный знак должен быть . вместо ,.

, с которым я игралследующее выражение, которое я нашел на этом форуме для аналогичной проблемы:

*//div[@class="product-price"]/span[@class="value" 
                                    and translate(normalize-space(),"€","")]

Но, к сожалению, оно не работает.

Использование цикла для последующего изменения значений не допускается вмой случай.

У кого-нибудь есть разумное решение для моей проблемы?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

In Xpath 2.0

for $i in //div[@class='product-price']//span[@class='value']
return translate($i, ", €", ".")
0 голосов
/ 23 сентября 2018

Ваша попытка XPath не работает должным образом, поскольку translate() находится внутри предиката, что полезно для формулирования критериев выбора, но не для изменения результатов выбора.Чтобы применить функцию к выбранному элементу ...

Для одного такого выбранного span элемента можно использовать

translate(//div[@class="product-price"]/span[@class="value"], ", €", ".")

Для нескольких таких выбранных span элементов, в XPath 2.0 можно использовать

//div[@class="product-price"]/span[@class="value"]/translate(., ", €", ".")

Для нескольких таких выбранных span элементов, в XPath 1.0 вы должны перебирать результаты вне XPath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...