web-dev-qa-db-fra.com

Caractères génériques XPath sur le nom du nœud

Je veux récupérer un nœud de mon fichier XML, le nœud a un préfixe tel que "latest_", mais cela peut changer et je souhaite que mon XSLT soit aussi fluide que possible. Voici le XPath que je veux utiliser:

/data/stats/*_cost

Cela devrait correspondre à latest_cost, newest_cost, anything_cost, Y-a-t'il une façon de le faire?

À votre santé :-)

42
Ben Everard

Il s'agit de l'expression XPath 1.0 correcte qui sélectionne un élément avec les 5 derniers caractères du nom égal à "_cost" dans n'importe quel espace de noms.

/data/stats/*[substring(name(), string-length(name()) - 4) = '_cost']
65
user357812

Vous pouvez également utiliser contains

par exemple

/data/stats[contains(.,'_cost')] 
7
redsquare

Avec XPath 1.0, vous pouvez utiliser le modèle /data/stats/*[substring-after(name(), '_cost') = '']. Cela vérifie si le nom de l'élément se termine par le suffixe _cost.

Dans XPath 2.0, il y a fn:ends-with(str, str) et votre expression correspondante sera *[ends-with(name(), '_cost')].

6
Alex Nikolaenkov

Ce qui précède n'a pas fonctionné pour moi. J'ai dû "légèrement" modifier cela comme suit:

/data/stats/*[contains(name(),'_cost')]
4
David W.