XPath et expression régulière [Résolu]

Signaler
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
-
cs_coq
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour,

Est il possible d'utiliser des expressions régulières dans des requêtes XPath ?

Dans mon cas, je souhaite trouver les nodes qui ont un attribut nommé Id finissant par _gc

Merci d'avance.

RMI

5 réponses

Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
79
Bonjour,

XmlElement.SelectSingleNode repose à l'heure actuelle sur XPath 1.0, donc la fonction ends-with n'existe pas.

Dans ce cas présent, on peut utiliser une combinaison de substring et string-length.

Ca donnerait quelque chose de ce genre (dans l'optique d'une requête paramétrée) :
Zones/Zone[substring(@id, string-length(@id) - string-length('_dr') + 1)='_dr']

Ou tout simplement, en partant du principe que les valeurs sont fixées dans la requête :
Zones/Zone[substring(@id, string-length(@id) - 2)='_dr']

En n'oubliant pas le commentaire qui va bien pour expliquer d'où sort le '2', pour la maintenance.


/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
16
Bonjour,

A ma connaissance, non.
Mais pourquoi vouloir utiliser les expressions régulières alors que le XPath te suffira pour ton besoin: http://www.csharpfr.com/tutoriaux/XPATH-LANGUAGE_536.aspx

Tu pourras même utiliser la fonction ends-with si tu utilises le XPath 2.0.

Quoi qu'il en soit, tu devrait te débrouiller facilement sans cette méthode et juste avec le tutorial de Bidou.

Bon développement,

Billou_13

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010

Merci pour ta réponse rapide.

Voilà ce que j'écris
xmlNode = xmlDoc.DocumentElement.SelectSingleNode("Zones/Zone[ends-with(@id,'_dr')]");

mais je lève l'exception suivante, je ne vois pas mon erreur

Le gestionnaire d'espaces de noms ou XsltContext est requis. Cette requête a un préfixe, une variable ou une fonction définie par l'utilisateur.

RMI
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010

Merci Coq.

Trop fort cet animal

RMI
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
79
De rien :-)


/*
coq
MVP Visual C#
CoqBlog
*/