Le XPath insensible à la casse contient()
Dans XSLT ou d'autres applications traversant le DOM, l'exécution de requêtes XPath avec des comparaisons de chaînes sensibles à la casse peut être limitant. Cependant, il est possible d'obtenir une fonctionnalité contain() insensible à la casse dans XPath 1.0.
1. Méthode basée sur la traduction (XPath 1.0)
Pour faire correspondre les variantes sensibles à la casse et insensibles à la casse d'une chaîne, utilisez la fonction traduire() :
/html/body//text()[ contains( translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'test' ) ]
Cette méthode traduit efficacement toutes les lettres majuscules en minuscules, permettant des comparaisons insensibles à la casse. Cependant, cela nécessite la connaissance du jeu de caractères attendu.
2. Génération XPath dynamique assistée par JavaScript
Si la manipulation de l'expression XPath est possible, vous pouvez utiliser JavaScript pour remplacer dynamiquement la chaîne de recherche par ses variantes majuscules et minuscules :
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");
Cette méthode gère recherche des chaînes avec des caractères arbitraires, y compris des guillemets simples.
Attention : Ces techniques peuvent ne pas fonctionner de manière optimale si des opérations de chaînes complexes/volumineuses sont impliquées. Si possible, envisagez d'autres solutions telles que le stockage de chaînes avec des jeux de caractères connus ou l'adoption de XPath 2.0, qui prend en charge nativement les comparaisons de chaînes insensibles à la casse.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3