Ceci est pour XPath 1.0. Si votre environnement prend en charge XPath 2.0, cliquez ici .
Oui. Possible, mais pas beau.
/html/body//text()[
contains(
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
'test'
)
]
Cela fonctionnerait pour les chaînes de recherche où l'alphabet est connu à l'avance. Ajoutez tous les caractères accentués que vous vous attendez à voir.
Si vous le pouvez, marquez le texte qui vous intéresse avec d'autres moyens, comme le placer dans un <span>
qui a une certaine classe lors de la construction du HTML. De telles choses sont beaucoup plus faciles à localiser avec XPath que des sous-chaînes dans le texte de l'élément.
Si ce n'est pas une option, vous pouvez laisser JavaScript (ou tout autre langage hôte que vous utilisez pour exécuter XPath) vous aider à créer une expression XPath dynamique:
function xpathPrepare(xpath, searchString) {
return xpath.replace("$u", searchString.toUpperCase())
.replace("$l", searchString.toLowerCase())
.replace("$s", searchString.toLowerCase());
}
xp = xpathPrepare("//text()[contains(translate(., '$u', '$l'), '$s')]", "Test");
// -> "//text()[contains(translate(., 'TEST', 'test'), 'test')]"
( Astuce du chapeau à la réponse de @ KirillPolishchuk - bien sûr, il vous suffit de traduire les caractères que vous recherchez réellement .)
Cette approche fonctionnerait pour n'importe quelle chaîne de recherche, sans nécessiter de connaissance préalable de l'alphabet, ce qui est un gros plus.
Les deux méthodes ci-dessus échouent lorsque les chaînes de recherche peuvent contenir des guillemets simples, auquel cas les choses se compliquent .