XPath字符串函数超过多个结果?

时间:2018-09-23 10:37:43

标签: html xml xpath

我有一个以下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 :(得分:0)

您尝试的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之外的结果。

答案 1 :(得分:0)

Xpath 2.0

for $i in //div[@class='product-price']//span[@class='value']
return translate($i, ", €", ".")