XPath peut-il correspondre à certaines parties du nom d'un élément ?
Question
Je veux faire ça:
//*fu
qui renvoie tous les nœuds dont le nom se termine par fu, tel que <tarfu />
et <snafu />
, mais non <fubar />
La solution
Faites quelque chose comme :
//*[ends-with(name(), 'fu')]
Pour une bonne référence XPath, consultez W3Écoles.
Autres conseils
Cette réponse est pour XPath 1.0 où il n'existe pas d'équivalent Fonction XPath 2.0 standard se termine par ().
L'expression XPath 1.0 suivante sélectionne tous les éléments du document XML dont les noms se terminent par la chaîne « fu » :
//*[substring(name(),string-length(name())-1) = 'fu']
J'ai eu du mal avec la réponse de Dimitre Novatchev, cela ne renverrait pas de matchs.Je savais que votre XPath devait avoir une section indiquant que "fu" avait une longueur de 2.
Il est conseillé d'avoir une longueur de chaîne ('fu') pour déterminer quoi sous-chaîner.
Pour ceux qui ne parviennent pas à obtenir des résultats avec sa réponse et qui ont besoin d'une solution avec XPath 1.0 :
//*[substring(name(), string-length(name()) - string-length('fu') +1) = 'fu']
Recherche les correspondances d'éléments se terminant par "fu"
ou
//*[substring(name(), string-length(name()) - string-length('Position') +1) = 'Position']
Recherche les correspondances avec les éléments se terminant par « Position »