La réponse de mjv est un bon début mais échouera si atag n'est pas le premier nom de classe listé.
L'approche habituelle est plutôt lourde :
//*[contains(concat(' ', @class, ' '), ' atag ')]
cela fonctionne tant que les classes sont séparées par des espaces uniquement, et non par d'autres formes d'espaces blancs. C'est presque toujours le cas. Si ce n'est pas le cas, vous devez rendre le système encore plus difficile à manier :
//*[contains(concat(' ', normalize-space(@class), ' '), ' atag ')]
(La sélection par des chaînes de caractères séparées par des espaces, comme les noms de classe, est un cas tellement courant qu'il est surprenant qu'il n'existe pas de fonction XPath spécifique pour cela, comme la fonction '[class~="atag"] de CSS3).
9 votes
Il est utile de préciser, je pense, que "atag btag" est un seul attribut, et non deux. Vous essayez de faire une correspondance de sous-chaîne dans xpath.
3 votes
Oui, vous avez raison, c'est ce que je veux.
0 votes
En rapport : stackoverflow.com/questions/8808921/ et stackoverflow.com/questions/1604471/
1 votes
C'est pourquoi vous devez utiliser un sélecteur CSS...
div.atag
oudiv.btag
. Super simple, pas de correspondance de chaîne, et BEAUCOUP plus rapide (et mieux supporté par les navigateurs). XPath (contre HTML) devrait être relégué à ce pour quoi il est utile... trouver des éléments par le texte contenu et pour la navigation DOM.