HtmlAgilityPack XPath, cas ignoré

.net-2.0 c# case-sensitive html-agility-pack xpath

Question

Quand j'utilise

SelectSingleNode("//meta[@name='keywords']")

ça ne marche pas, mais quand j'utilise le même cas que dans le document original ça marche bien:

SelectSingleNode("//meta[@name='keywords']")

La question est donc: comment puis-je définir la casse en ignorant?

Réponse acceptée

Si vous avez besoin d’une solution plus complète, vous pouvez écrire une fonction d’extension pour le processeur XPath qui effectuera une comparaison sans distinction de casse. C'est un peu de code, mais vous ne l'écrivez qu'une fois.

Après avoir implémenté l'extension, vous pouvez écrire votre requête comme suit

"//meta[@name[Extensions:CaseInsensitiveComparison('Keywords')]]"

Extensions:CaseInsensitiveComparison est la fonction d'extension implémentée dans l'exemple ci-dessous.

NOTE: ceci n'est pas bien testé, je l'ai simplement assemblé pour cette réponse afin que la gestion des erreurs, etc., soit inexistante!

Voici le code du contexte XSLT personnalisé qui fournit une ou plusieurs fonctions d'extension.

"//meta[@name[Extensions:CaseInsensitiveComparison('Keywords')]]"

Vous pouvez ensuite utiliser la fonction d'extension ci-dessus dans vos requêtes XPath. Voici un exemple pour notre cas.

"//meta[@name[Extensions:CaseInsensitiveComparison('Keywords')]]"

Réponse populaire

Si la valeur réelle est un cas inconnu, je pense que vous devez utiliser la traduction. Je crois que c'est:

SelectSingleNode("//meta[translate(@name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='keywords']")

C'est le hack, mais c'est la seule option dans XPath 1.0 (sauf l'inverse de la majuscule).




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi