Je veux écrire la réponse canonique à cette question car la réponse ci-dessus a un problème.
Notre problème
Le sélecteur CSS :
.foo
sélectionnera tout élément ayant la classe foo .
Comment faites-vous cela dans XPath?
Bien que XPath soit plus puissant que CSS, XPath n'a pas d'équivalent natif d'un sélecteur de classe CSS . Cependant, il existe une solution.
La bonne façon de le faire
Le sélecteur équivalent dans XPath est:
//*[contains(concat(" ", normalize-space(@class), " "), " foo ")]
La fonction normalize-space supprime les espaces de début et de fin (et remplace également les séquences de caractères d'espaces par un seul espace).
(Dans un sens plus général) c'est aussi l'équivalent du sélecteur CSS:
*[class~="foo"]
qui correspondra à tout élément dont la valeur d'attribut de classe est une liste de valeurs séparées par des espaces, dont l'une est exactement égale à foo .
Quelques façons évidentes mais incorrectes de le faire
Le sélecteur XPath:
//*[@class="foo"]
ne fonctionne pas! car il ne correspondra pas à un élément qui a plus d'une classe, par exemple
<div class="foo bar">
Il ne correspondra pas non plus s'il y a un espace supplémentaire autour du nom de la classe:
<div class=" foo ">
Le sélecteur XPath `` amélioré ''
//*[contains(@class, "foo")]
ne fonctionne pas non plus! car il correspond à tort des éléments avec la classe foobar , par exemple
<div class="foobar">
Le mérite revient à ce type, qui était la première solution publiée à ce problème que j'ai trouvée sur le Web:
http://dubinko.info/blog/2007/10/01/simple-parsing-of-space-seprated-attributes- in-xpathxslt /