Syntaxe XPAth

Résolu
cs_lordphoenix Messages postés 3 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 26 novembre 2007 - 26 nov. 2007 à 11:44
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 - 26 nov. 2007 à 14:19
Bonjour,
J'utilise un fichier XML pour une petite application simple de gestion de liste de livre et j'utilise des requêtes XPAth pour faire des recherches dedans mais j'ai un problème avec la syntaxe XPAth.
voici grosso modo le format du fichier XML :

<livre>
    <titre>Titre</titre>
    <genre>genre </genre>
    etc.. pour chaque information du livre
</livre>

Je cherche la syntaxe XPath me permettant de retrouver l'ensemble des livres dont l'une des information (donc l'un des neuds enfant) a une certaine valeur.

Quelqu'un aurait une petite idée?
Merci d'avance
Si d'ailleurs vous conaissez des liens vers de la dox concernant XPath je suis preneur.

8 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
26 nov. 2007 à 12:12
Hello,

à mon avis, le xPath à utiliser doit être du genre /biblio/livre[titre='Titre1'], pour par exemple trouver tout les livres dont le titre est "Livre1".

Deux petites choses billou_13 : on peut faire la sélection directement dans le xpath, et si tu connais le path exact, pas besoin de doubler les /.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
3
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
26 nov. 2007 à 12:07
Voici un petit exemple histoire d'expliquer tout cela :

//-- Code ---

using

System.Xml;
XmlDocument

xmlDoc =
new
XmlDocument();xmlDoc.Load(

@"c:\test.xml");

XmlNodeList livreNodes = xmlDoc.SelectNodes(
"//biblio//livre");

foreach (
XmlNode curNode
in livreNodes){

XmlNode titreNode = curNode.SelectSingleNode(
"//titre");

string titre = titreNode.InnerText;

//OU

foreach (
XmlNode childNode
in titreNode.ChildNodes){

string node = childNode.Name;

string text = childNode.InnerText;}

//etc...}

//-- Fin Code --

Remarque: la propriété InnerText est à vérifier (tu as aussi InnerXml, OuterText, ...). Mais il me semble que c'est celle-là qui est correcte pour toi.

Bon courage

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
cs_lordphoenix Messages postés 3 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 26 novembre 2007
26 nov. 2007 à 12:43
billou : Je cherce justement à utiliser XPath pour éviter d'avoir à parcourir l'ensemble de la liste sinon ce serait déjà fait.
SharpMoa : OK Merci je vais tester ta solution à priori elle a l'air logique vu ce que je connais de XPath, je n'aurais pas pense à quelque chose de si simple en fait
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
26 nov. 2007 à 12:52
Voire ma source sur XPath
http://www.csharpfr.com/tutoriaux/XPATH-LANGUAGE_536.aspx

<hr />
-My Blog-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Maxv Messages postés 1 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 26 novembre 2007
26 nov. 2007 à 13:01
Salut
il me semble qu'il faut un @ dans le xpath au niveau de la restriction sur l'attribut :
string value = xmlDoc.SelectSingleNode(@"/biblio/livre[@titre='Titre1']").InnerText;

Max
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
26 nov. 2007 à 13:03
Hello Maxv,


Il ne faut de @ que pour les attributs. Comme l'exemple montré ne contient que des éléments, pas besioin de @.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
cs_lordphoenix Messages postés 3 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 26 novembre 2007
26 nov. 2007 à 13:59
OK Super merci beaucoup à vous tous ça marche nickel maintenant.
Comme quoi finalement c'était plus simple qu'il n'y paraîssait
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
26 nov. 2007 à 14:19
De rien ,

Même si ce n'est pas une question spécifique c#, ça fait toujours plaisir de répondre à une réponse précise posé par quelqu'un de poli.
N'oublie pas de valider la (les) bonne(s) réponse(s), ça aidera les personnes qui feront une recherche sur le même sujet et verront cette question.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
Rejoignez-nous