Maison  >  Article  >  interface Web  >  Comment obtenir la fonctionnalité contain() insensible à la casse dans XPath 1.0 ?

Comment obtenir la fonctionnalité contain() insensible à la casse dans XPath 1.0 ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-23 01:17:30608parcourir

How to Achieve Case-Insensitive contains() Functionality in XPath 1.0?

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 variations 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 :

<code class="javascript">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");</code>

Ceci La méthode gère les chaînes de recherche avec des caractères arbitraires, y compris les 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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn