Quiero escribir la respuesta canónica a esta pregunta porque la respuesta anterior tiene un problema.
Nuestro problema
El selector de CSS :
.foo
seleccionará cualquier elemento que tenga la clase foo .
¿Cómo se hace esto en XPath?
Aunque XPath es más poderoso que CSS, XPath no tiene un equivalente nativo de un selector de clases CSS . Sin embargo, existe una solución.
La forma correcta de hacerlo
El selector equivalente en XPath es:
//*[contains(concat(" ", normalize-space(@class), " "), " foo ")]
La función normalizar el espacio elimina los espacios en blanco iniciales y finales (y también reemplaza las secuencias de caracteres de espacios en blanco por un solo espacio).
(En un sentido más general) también es el equivalente del selector CSS:
*[class~="foo"]
que coincidirá con cualquier elemento cuyo valor de atributo de clase sea una lista de valores separados por espacios en blanco, uno de los cuales es exactamente igual a foo .
Un par de formas obvias pero incorrectas de hacerlo
El selector XPath:
//*[@class="foo"]
no funciona! porque no coincidirá con un elemento que tenga más de una clase, por ejemplo
<div class="foo bar">
Tampoco coincidirá si hay espacios en blanco adicionales alrededor del nombre de la clase:
<div class=" foo ">
El selector XPath 'mejorado'
//*[contains(@class, "foo")]
¡tampoco funciona! porque coincide incorrectamente con elementos de la clase foobar , por ejemplo
<div class="foobar">
El crédito es para este tipo, que fue la primera solución publicada para este problema que encontré en la web:
http://dubinko.info/blog/2007/10/01/simple-parsing-of-space-seprated-attributes- in-xpathxslt /