Je veux écrire la réponse canonique à cette question, car la réponse ci-dessus a un problème.
Notre problème
Le CSS selector:
.foo
permettra de sélectionner n'importe quel élément qui a la classe foo.
Comment faites-vous cela dans XPath?
Bien que XPath est plus puissant que les CSS, XPath n'est pas un natif de l'équivalent d'une classe CSS. Cependant, il existe une solution.
La bonne façon de le faire
L'équivalent selector XPath est:
//*[contains(concat(" ", normalize-space(@class), " "), " foo ")]
La fonction normalize-space bandes d'attaque et de fuite des espaces (et remplace également les séquences de caractères espace par un espace).
(Dans un sens plus général) c'est aussi l'équivalent du sélecteur CSS:
*[class~="foo"]
qui va correspondre à tout élément dont la classe de la valeur de l'attribut est une liste des espaces de valeurs séparées, dont l'une est exactement égale à toto.
Un couple d'évident, mais les mauvaises façons de le faire
Le selector XPath:
//*[@class="foo")]
ne fonctionne pas! parce que ça ne correspond pas à un élément qui a plus d'une classe, par exemple
<div class="foo bar">
Elle a également remporté le match pas si il n'y a aucun supplément de l'espace autour du nom de la classe:
<div class=" foo ">
Le "amélioré" selector XPath
//*[contains(@class, "foo")]
ne fonctionne pas non plus! parce qu'il correspond à tort les éléments avec la classe de foobar, par exemple
<div class="foobar">
Le crédit va à ce gars, qui a été le premier publié solution à ce problème que j'ai trouvé sur le web:
http://dubinko.info/blog/2007/10/01/simple-parsing-of-space-seprated-attributes-in-xpathxslt/