Quero escrever a resposta canônica a esta pergunta porque a resposta acima tem um problema.
Nosso problema
O seletor CSS :
.foo
irá selecionar qualquer elemento que tenha a classe foo .
Como você faz isso no XPath?
Embora XPath seja mais poderoso que CSS, XPath não tem um equivalente nativo de um seletor de classe CSS . No entanto, existe uma solução.
A maneira certa de fazer isso
O seletor equivalente no XPath é:
//*[contains(concat(" ", normalize-space(@class), " "), " foo ")]
A função normalize-space remove os espaços em branco à esquerda e à direita (e também substitui as sequências de caracteres de espaço em branco por um único espaço).
(Em um sentido mais geral), isso também é equivalente ao seletor CSS:
*[class~="foo"]
que corresponderá a qualquer elemento cujo valor de atributo de classe seja uma lista de valores separados por espaços em branco, um dos quais é exatamente igual a foo .
Algumas maneiras óbvias, mas erradas de fazer isso
O seletor XPath:
//*[@class="foo"]
não funciona! porque não vai corresponder a um elemento que tem mais de uma classe, por exemplo
<div class="foo bar">
Também não corresponderá se houver algum espaço em branco extra ao redor do nome da classe:
<div class=" foo ">
O seletor XPath 'aprimorado'
//*[contains(@class, "foo")]
também não funciona! porque corresponde erroneamente a elementos com a classe foobar , por exemplo
<div class="foobar">
O crédito vai para este sujeito, que foi a primeira solução publicada para esse problema que encontrei na web:
http://dubinko.info/blog/2007/10/01/simple-parsing-of-space-seprated-attributes- in-xpathxslt /