J'utilise C# et .NET 2.0.Comment utiliser la fonction translate dans un prédicat d'un argument XPath vers XmlDocument.SelectNodes?
Étant donné le code XML ci-dessous, je voudrais obtenir un XMLNodeList
de <user>
nœuds où le <role>
est "admin".
<users>
<user>
<name>John Doe</name>
<roles>
<role>superadmin</role>
<role>admin</role>
</roles>
</user>
<user>
<name>Jane Doe</name>
<roles>
<role>superadmin</role>
<role>admin</role>
</roles>
</user>
<user>
<name>Rob Doe</name>
<roles>
<role>support</role>
</roles>
</user>
</users>
Supposons roleName = "admin". Cela fonctionne, mais est sensible à la casse.
userNodesForRole = _document.SelectNodes("//users/user[roles[role='" + roleName + "']]");
Je veux le faire sans tenir compte de la casse. Je sais que je ne peux pas utiliser la fonction matches
parce que .NET 2.0 (et peut-être plus élevé?) Ne supporte pas XPath 2.0. J'ai donc fait ceci:
// abc...xyz is the string literal of the entire alphabet, of course
userNodesForRole = _document.SelectNodes("//users/user[roles[translate(role,'abc..xyz','ABC...XYZ')='" + roleName.ToUpper() + "']]", _xmlNamespaceManager);
Cependant, je ne récupère aucun noeud. Quelqu'un peut-il me dire ce que je me trompe?
BTW, C# n'est pas vraiment pertinent pour votre question. C'est une question .NET 2.0, et vous êtes en train de programmer en C#. –
Que se passe-t-il lorsque vous essayez d'utiliser votre code avec l'appel de 'translate'? Ça a l'air ok sur la surface. – Jacob