2 votes

Fonction de chaîne XPath sur plusieurs résultats ?

J'ai un exemple suivant de code HTML. Mon objectif est d'adresser les prix avec 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>

J'essayais l'expression XPATH suivante :

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

ou

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

Le résultat est :

9,99 €
4,99 €

Jusqu'à présent, tout va bien. Maintenant, j'ai besoin d'avoir le résultat sans signe de devise et le signe décimal doit être un . au lieu d'un , .

J'ai joué avec l'expression suivante, que j'ai trouvée dans ce forum pour un problème similaire :

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

Mais malheureusement, cela ne fonctionne pas.

L'utilisation d'une boucle pour modifier les valeurs par la suite n'est pas envisageable dans mon cas.

Quelqu'un a-t-il une solution intelligente pour mon problème ?

2voto

kjhughes Points 5581

Votre tentative de XPath ne fonctionne pas comme prévu car translate() se trouve dans un prédicat, ce qui est utile pour formuler les critères de sélection mais pas pour modifier les résultats de la sélection. Pour appliquer une fonction à ce qui est sélectionné...

Pour un simple tels que sélectionnés span vous pouvez utiliser l'élément

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

Pour multiple tels que sélectionnés span éléments, dans XPath 2.0 vous pouvez utiliser

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

Pour multiple tels que sélectionnés span éléments, dans XPath 1.0 vous devez itérer sur les résultats en dehors de XPath.

0voto

Er Bharath Ram Points 86

Sur Xpath 2.0

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X