Xpath ???

Résolu
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006 - 8 déc. 2005 à 13:45
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006 - 9 déc. 2005 à 17:38
Lut gens,

J'ai une super question sur laquelle je ne trouve pas de réponse sur le web.


Je cherche à faire une requête sur un doc XML afin de récupérer des enregistrements.

Mon XML est de forme :
<Zone>
<CP>01 000 Bourg-en-Bresse</CP>
<REF>0107</REF>
<VOISINS>0105,E</VOISINS>
</Zone>
<Zone>
<CP>01 100 Oyonnax</CP>
<REF>0101</REF>
<VOISINS>0105,SW;3904,N</VOISINS>
</Zone>


Je voudrais en fait récupérer REF et Voisins en fonction de CP.


Est ce possible avec des requêtes Xpath ?
Quelle est la syntaxe correcte ?

13 réponses

TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
9 déc. 2005 à 15:06
Et encore encore plus propre :



private
void Form1_Load(
object sender, System.EventArgs e)


{


DataSet ds =
new DataSet();


ds.ReadXml(@"zones.xml");


comboBox1.DataSource = ds.Tables[0];


comboBox1.DisplayMember = "CP";


}



private
void comboBox1_SelectedIndexChanged(
object sender, System.EventArgs e)


{



string chemin = "zones.xml";


XmlDocument lesZones =
new XmlDocument();


lesZones.Load(chemin);



// Mon texte (valeur du choix du menu déroulant)



string MonTexte = comboBox1.Text;



// On découpe et on met sous forme d'un tableau



string[] Result_Separation = MonTexte.Split(' ');



string codePostal =
string.Format("{0} {1}",Result_Separation[0], Result_Separation[1]);



string nomVille = MonTexte.Substring(codePostal.Length + 3).Trim();


XmlTextReader reader =
new XmlTextReader("zones.xml");


reader.WhitespaceHandling = WhitespaceHandling.All;



string maRecherche = comboBox1.Text;


XmlDocument oZones =
new XmlDocument();


oZones.Load(reader);


reader.Close();



//Find the root node,


XmlNode xnod = oZones.DocumentElement;



string sXPath = "//Zones/Zone[CP='" + maRecherche + "']/REF | //Zones/Zone[CP='" + MonTexte + "']/VOISINS";


XmlNodeList oList = oZones.SelectNodes(sXPath);



if (oList.Count>0)


MessageBox.Show(oList[0].OuterXml);


}

Bon j'arrete là j'ai du boulot.

::|The S@ib|::
MVP C#.NET
3
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
8 déc. 2005 à 15:55
Exemple de requete :

//Zones/Zone[CP='01 000 Bourg-en-Bresse']/REF | //Zones/Zone[CP='01 000 Bourg-en-Bresse']/VOISINS

Te renvois :
<REF>0107
</REF>
<VOISINS>0105,E
</VOISINS>

Sachant que ton XML n'est pas correct snas élément racine unique, d'ou le rajout de Zones dans ma requête.
0
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006
8 déc. 2005 à 16:11
En fait mon XML comporte bien l'élément racine Zones (comment t'as deviné le nom !!!)
Chaud la syntaxe j'ai eu beau chercher rien trouvé de tel ...

Ben je teste et je repost si j'y arrive po ...

Merci encore cher Prof (oui en gros c'est toujours toi qui m'aide et vu que je tente d'apprendre seul ...)
0
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006
8 déc. 2005 à 16:41
Ok ça avance ...
Mais j'arrive pas a récup de valeur ...


// recherche du CP dans Zones.xml


XmlDocument oZones =
new XmlDocument();


oZones.Load("zones.xml");



string sXPath = @"//Zones/Zone[CP='" + MonTexte + "']/REF";
// | //Zones/Zone[CP='" + MonTexte + "']/VOISINS";


XmlNodeList oList = oZones.SelectNodes(sXPath);



if (oList.Count>0)


textBox1.Text = oList[0].InnerText;

Mon oList a pas de valeur !!!
0

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

Posez votre question
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
8 déc. 2005 à 16:44
Pourtant c'est testé chez moi :

http://www.topxml.com/xpathvisualizer/


//Zones/Zone[CP='01 000 Bourg-en-Bresse']/REF | //Zones/Zone[CP='01 000 Bourg-en-Bresse']/VOISINS

Te renvois :
<REF>0107
</REF>
<VOISINS>0105,E
</VOISINS>

Sur :

-<Zones>
-<Zone>
<CP>01 000 Bourg-en-Bresse
</CP>
<REF>0107
</REF>
<VOISINS>0105,E
</VOISINS>
</Zone>
-<Zone>
<CP>01 100 Oyonnax
</CP>
<REF>0101
</REF>
<VOISINS>0105,SW;3904,N
</VOISINS>
</Zone>
</Zones>
0
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006
8 déc. 2005 à 16:49
Alors mon code doit merder ...
J'arrive bien à utiliser une variable pour mon CP ...
le string est bon mais après je suis pas sûr de ce que j'ai fait ... c'est de là que doit venir la merde !!!
0
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006
9 déc. 2005 à 11:53
Voici le code ... si quelqu'un peut me dire pourquoi oList n'a aucune valeur !!!


using System;


using System.Drawing;


using System.Collections;


using System.Xml;


using System.Xml.XPath;


using System.ComponentModel;


using System.Windows.Forms;


using System.Data;


using System.IO;


namespace Station_récup_météo


{



/// <summary>



/// Description résumée de Form1.



/// </summary>



public
class Form1 : System.Windows.Forms.Form


{



private System.Windows.Forms.Label label1;



private System.Windows.Forms.ComboBox comboBox1;



private System.Windows.Forms.Label label2;



private System.Windows.Forms.Label label3;



private System.Data.DataSet dsZones;



/// <summary>



/// Variable nécessaire au concepteur.



/// </summary>



private System.ComponentModel.Container components =
null;



private System.Windows.Forms.TextBox textBox1;



private XmlDocument doc =
new XmlDocument();



public Form1()


{



//



// Requis pour la prise en charge du Concepteur Windows Forms



//


InitializeComponent();



//



// TODO : ajoutez le code du constructeur après l'appel à InitializeComponent



//



//on lit le fichier XML, on lève une erreur en cas de pépin


String fichier = "zones.xml";



try


{



using (FileStream fin =
new FileStream (fichier, FileMode.Open, FileAccess.Read))


{


doc.Load(fin);


}


}



catch(XmlException e)


{


System.Windows.Forms.MessageBox.Show(



this,


"Le fichier XML <" + fichier + "> est *mal formé*. Il ne peut être lu.\nL'application va se terminer.\n\n>>Message original :\n" + e.Message,


"Erreur",


System.Windows.Forms.MessageBoxButtons.OK,


System.Windows.Forms.MessageBoxIcon.Error


);


Application.Exit();


}



catch(FileNotFoundException e)


{


System.Windows.Forms.MessageBox.Show(



this,


"Le fichier XML <" + fichier + "> ne peut être trouvé.\nL'application va se terminer.\n\n>>Message original :\n" + e.Message,


"Erreur",


System.Windows.Forms.MessageBoxButtons.OK,


System.Windows.Forms.MessageBoxIcon.Error


);


Application.Exit();


}



catch(UnauthorizedAccessException e)


{


System.Windows.Forms.MessageBox.Show(



this,


"Le fichier XML <" + fichier + "> ne peut être lu faute de droits suffisant. Contactez votre admin.\nL'application va se terminer.\n\n>>Message original :\n" + e.Message,


"Erreur",


System.Windows.Forms.MessageBoxButtons.OK,


System.Windows.Forms.MessageBoxIcon.Error


);


Application.Exit();


}



catch(IOException e)


{


System.Windows.Forms.MessageBox.Show(



this,


"Le fichier XML <" + fichier + "> a causé une erreur d'Entrée/Sortie.\nL'application va se terminer.\n\n>>Message original :\n" + e.Message,


"Erreur",


System.Windows.Forms.MessageBoxButtons.OK,


System.Windows.Forms.MessageBoxIcon.Error


);


Application.Exit();


}


}



/// <summary>



/// Nettoyage des ressources utilisées.



/// </summary>



protected
override
void Dispose(
bool disposing )


{



if( disposing )


{



if (components !=
null)


{


components.Dispose();


}


}



base.Dispose( disposing );


}


#region Code généré par le Concepteur Windows Form



/// <summary>



/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas



/// le contenu de cette méthode avec l'éditeur de code.



/// </summary>



private
void InitializeComponent()


{



this.dsZones =
new System.Data.DataSet();



this.label1 =
new System.Windows.Forms.Label();



this.comboBox1 =
new System.Windows.Forms.ComboBox();



this.label2 =
new System.Windows.Forms.Label();



this.label3 =
new System.Windows.Forms.Label();



this.textBox1 =
new System.Windows.Forms.TextBox();


((System.ComponentModel.ISupportInitialize)(
this.dsZones)).BeginInit();



this.SuspendLayout();



//



// dsZones



//



this.dsZones.DataSetName = "NewDataSet";



this.dsZones.Locale =
new System.Globalization.CultureInfo("fr-FR");



//



// label1



//



this.label1.Font =
new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));



this.label1.Location =
new System.Drawing.Point(176, 16);



this.label1.Name = "label1";



this.label1.Size =
new System.Drawing.Size(128, 23);



this.label1.TabIndex = 0;



this.label1.Text = "Choix de la ville :";



this.label1.Click +=
new System.EventHandler(
this.label1_Click);



//



// comboBox1



//



this.comboBox1.Items.AddRange(
new
object[] {


"01 000 - Bourg en Bresse",


"01 100 - Oyonnax",


"02 405 - Château Thierry",


"06 000 - Nice",


"06 200 - Nice",


"08 000 - Charleville Mézières",


"10 300 - Sainte-Savine",


"13 001 - Marseille",


"14 000 - Caen",


"17 000 - La Rochelle",


"21 000 - Dijon",


"25 000 - Besançon",


"26 000 - Valence",


"28 300 - Leves",


"29 000 - Quimper",


"29 200 - Brest",


"30 100 - Ales",


"30 900 - Nîmes",


"31 000 - Toulouse",


"33 000 - Bordeaux",


"34 000 - Montpellier",


"34 420 - Villeneuve les Béziers",


"35 135 - Chantepie",


"37 550 - Saint-Avertin",


"38 100 - Grenoble",


"38 200 - Vienne",


"42 100 - Saint Etienne",


"44 400 - Reze",


"44 600 - Saint Nazaire",


"45 000 - Orléans",


"49 000 - Angers",


"50 100 - Cherbourg",


"51 100 - Reims",


"54 000 - Nancy",


"57 070 - Metz",


"58 000 - Nevers",


"59 650 - Villeneuve d\'Ascq",


"60 000 - Beauvais",


"60 200 - Compiègne",


"62 300 - Lens",


"63 100 - Clermont Ferrand",


"64 200 - Biarritz",


"64 230 - Lescar",


"66 000 - Perpignan",


"67 000 - Strasbourg",


"68 000 - Colmar",


"68 100 - Mulhouse",


"69 009 - Lyon",


"69 400 - Villefranche sur Saône",


"71 000 - Mâcon",


"71 100 - Châlon sur Saône",


"72 000 - Le Mans",


"73 000 - Chambéry",


"73 200 - Albertville",


"74 160 - Archamps",


"76 000 - Rouen",


"76 370 - Neuville les Dieppes",


"79 000 - Niort",


"80 000 - Amiens",


"81 100 - Castres",


"82 005 - Montauban",


"83 160 - La Valette",


"84 000 - Avignon",


"85 200 - Fontenay le Comte",


"86 000 - Poitiers",


"87 000 - Limoges"});



this.comboBox1.Location =
new System.Drawing.Point(312, 16);



this.comboBox1.Name = "comboBox1";



this.comboBox1.Size =
new System.Drawing.Size(224, 21);



this.comboBox1.TabIndex = 1;



this.comboBox1.Text = "Choix de la ville";



this.comboBox1.SelectedIndexChanged +=
new System.EventHandler(
this.comboBox1_SelectedIndexChanged);



//



// label2



//



this.label2.Location =
new System.Drawing.Point(232, 56);



this.label2.Name = "label2";



this.label2.Size =
new System.Drawing.Size(88, 24);



this.label2.TabIndex = 3;



this.label2.Text = "Prévisions pour ";



//



// label3



//



this.label3.Location =
new System.Drawing.Point(320, 56);



this.label3.Name = "label3";



this.label3.Size =
new System.Drawing.Size(200, 24);



this.label3.TabIndex = 4;



//



// textBox1



//



this.textBox1.Location =
new System.Drawing.Point(216, 152);



this.textBox1.Name = "textBox1";



this.textBox1.Size =
new System.Drawing.Size(288, 20);



this.textBox1.TabIndex = 5;



this.textBox1.Text = "";



//



// Form1



//



this.AutoScaleBaseSize =
new System.Drawing.Size(5, 13);



this.ClientSize =
new System.Drawing.Size(792, 570);



this.Controls.Add(
this.textBox1);



this.Controls.Add(
this.label3);



this.Controls.Add(
this.label2);



this.Controls.Add(
this.comboBox1);



this.Controls.Add(
this.label1);



this.Name = "Form1";



this.Text = "Form1";



this.Load +=
new System.EventHandler(
this.Form1_Load);


((System.ComponentModel.ISupportInitialize)(
this.dsZones)).EndInit();



this.ResumeLayout(
false);


}


#endregion



/// <summary>



/// Point d'entrée principal de l'application.



/// </summary>


[STAThread]



static
void Main()


{


Application.Run(
new Form1());


}



private
void Form1_Load(
object sender, System.EventArgs e)


{



// string chemin = "zones.xml";



// XmlDocument lesZones = new XmlDocument();



// lesZones.LoadXml(chemin);


}



private
void label1_Click(
object sender, System.EventArgs e)


{


}



private
void comboBox1_SelectedIndexChanged(
object sender, System.EventArgs e)


{



string chemin = "zones.xml";


XmlDocument lesZones =
new XmlDocument();


lesZones.Load(chemin);



// Mon texte (valeur du choix du menu déroulant)



string MonTexte = comboBox1.Text;



// On défini le caractère



char[] Caractaire_Separateur =
new Char[] {' '};
// Caractère 'espace' ,



// On découpe et on met sous forme d'un tableau



string[] Result_Separation = MonTexte.Split(Caractaire_Separateur,100);



string codePostal = Result_Separation[0] + " " + Result_Separation[1];



string nomVille = "";


// Récupération du nom de la ville (premier caractère CP partie 1, troisième -)



for (
int a=3 ; a< Result_Separation.Length ;a++)


{


nomVille = nomVille + " " + Result_Separation[a];


}



// Affiche le nom de la ville;


label3.Text = nomVille;



// recherche du CP dans Zones.xml


XmlTextReader reader =
new XmlTextReader("zones.xml");


reader.WhitespaceHandling = WhitespaceHandling.All;



string maRecherche = codePostal + " " + nomVille;


XmlDocument oZones =
new XmlDocument();


oZones.Load(reader);


reader.Close();



//Find the root node,


XmlNode xnod = oZones.DocumentElement;



string sXPath = "//Zones/Zone[CP='" + maRecherche + "']/REF | //Zones/Zone[CP='" + MonTexte + "']/VOISINS";


XmlNodeList oList = oZones.SelectNodes(sXPath);



if (oList.Count>0)


Console.WriteLine(oList[0].OuterXml);


}


}


}
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
9 déc. 2005 à 14:34
Parce qu'il cherche "Bourg en bresse" et dans le xml c'est "bourg-en-bresse"
0
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006
9 déc. 2005 à 14:39
Ok; pour ce cas particulier ...
Mais ci-joint le XML (et ça fonctionne avec rien !!!)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Zones xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Zone>
<CP>01 000 Bourg-en-Bresse</CP>
<REF>0107</REF>
<VOISINS>0105,E</VOISINS>
</Zone>
<Zone>
<CP>01 100 Oyonnax</CP>
<REF>0101</REF>
<VOISINS>0105,SW;3904,N</VOISINS>
</Zone>
<Zone>
<CP>02 405 Château Thierry</CP>
<REF>0207</REF>
<VOISINS>0206,W;0205,N</VOISINS>
</Zone>
<Zone>
<CP>06 000 Nice</CP>
<REF>0605</REF>
<VOISINS>0604,N;0603,W;0602,NW</VOISINS>
</Zone>
<Zone>
<CP>06 200 Nice</CP>
<REF>0605</REF>
<VOISINS>0604,N;0603,W;0602,NW</VOISINS>
</Zone>
<Zone>
<CP>08 000 Charleville Mézières</CP>
<REF>0802</REF>
<VOISINS>0804,SE;0801,N</VOISINS>
</Zone>
<Zone>
<CP>10 300 Sainte-Savine</CP>
<REF>1002</REF>
</Zone>
<Zone>
<CP>13 001 Marseille</CP>
<REF>1310</REF>
<VOISINS>1307,N;1306,E;1311,SE</VOISINS>
</Zone>
<Zone>
<CP>14 000 Caen</CP>
<REF>1403</REF>
<VOISINS>1401,N;1404,E;1402,W</VOISINS>
</Zone>
<Zone>
<CP>17 000 la Rochelle</CP>
<REF>1704</REF>
<VOISINS>1703,E</VOISINS>
</Zone>
<Zone>
<CP>21 000 Dijon</CP>
<REF>2107</REF>
<VOISINS>2102,NW;2103,ESE;2104,SW</VOISINS>
</Zone>
<Zone>
<CP>25 000 Besancon</CP>
<REF>2501</REF>
<VOISINS>7002,NW;2503,SE</VOISINS>
</Zone>
<Zone>
<CP>25 200 Montbeliard</CP>
<REF>2502</REF>
<VOISINS>9003,NE;7004,NW;2504,S</VOISINS>
</Zone>
<Zone>
<CP>26 000 Valence</CP>
<REF>2602</REF>
<VOISINS>2603,S;2605,E;0705,W</VOISINS>
</Zone>
<Zone>
<CP>28 300 Leves</CP>
<REF>2802</REF>
</Zone>
<Zone>
<CP>29 000 Quimper</CP>
<REF>2907</REF>
<VOISINS>2908,S;2903,W;2906,N</VOISINS>
</Zone>
<Zone>
<CP>29 200 Brest</CP>
<REF>2903</REF>
<VOISINS>2902,N</VOISINS>
</Zone>
<Zone>
<CP>30 100 Ales</CP>
<REF>3003</REF>
<VOISINS>3002,W</VOISINS>
</Zone>
<Zone>
<CP>30 900 Nîmes</CP>
<REF>3006</REF>
<VOISINS>3003,N</VOISINS>
</Zone>
<Zone>
<CP>31 000 Toulouse</CP>
<REF>3101</REF>
<VOISINS>3104,N;3207,W;3105,SW;3102,S;3103,E</VOISINS>
</Zone>
<Zone>
<CP>33 000 Bordeaux</CP>
<REF>3304</REF>
<VOISINS>3303,W;3307,E;3305,NE</VOISINS>
</Zone>
<Zone>
<CP>34 000 Montpellier</CP>
<REF>3408</REF>
<VOISINS>3405,N;3007,E;3407SW</VOISINS>
</Zone>
<Zone>
<CP>34 420 Villeneuve les Béziers</CP>
<REF>3406</REF>
<VOISINS>3403,NW;3404,N;3407,NE</VOISINS>
</Zone>
<Zone>
<CP>35 135 Chantepie</CP>
<REF>3505</REF>
<VOISINS>3502,NW;3506,E;3507,S;3504,SW</VOISINS>
</Zone>
<Zone>
<CP>37 550 Saint-Avertin</CP>
<REF>3704</REF>
<VOISINS>3702,N;3701,NW;3703,W;3705,S</VOISINS>
</Zone>
<Zone>
<CP>38 100 Grenoble</CP>
<REF>3804</REF>
<VOISINS>3802,E;3806,W</VOISINS>
</Zone>
<Zone>
<CP>38 200 Vienne</CP>
<REF>3807</REF>
<VOISINS>6906,W</VOISINS>
</Zone>
<Zone>
<CP>42 100 Saint-Etienne</CP>
<REF>4205</REF>
<VOISINS>4206,SE;4207,E;4203,NW;4201,WNW</VOISINS>
</Zone>
<Zone>
<CP>44 400 Reze</CP>
<REF>4404</REF>
<VOISINS>4402,N</VOISINS>
</Zone>
<Zone>
<CP>44 600 Saint-Nazaire</CP>
<REF>4401</REF>
<VOISINS>4403,S</VOISINS>
</Zone>
<Zone>
<CP>45 000 Orléans</CP>
<REF>4504</REF>
<VOISINS>4501,NW;4503,NE;4505,S</VOISINS>
</Zone>
<Zone>
<CP>49 000 Angers</CP>
<REF>4902</REF>
<VOISINS>4903,E;4905,SE;4901,W</VOISINS>
</Zone>
<Zone>
<CP>50 100 Cherbourg</CP>
<REF>5002</REF>
<VOISINS>5003,SW;5001,SE</VOISINS>
</Zone>
<Zone>
<CP>51 100 Reims</CP>
<REF>5101</REF>
<VOISINS>5105,SE;5102,SE;0205,W</VOISINS>
</Zone>
<Zone>
<CP>54 000 Nancy</CP>
<REF>5404</REF>
<VOISINS>5403,N</VOISINS>
</Zone>
<Zone>
<CP>57 070 Metz</CP>
<REF>5702</REF>
<VOISINS>5701,W</VOISINS>
</Zone>
<Zone>
<CP>58 000 Nevers</CP>
<REF>5801</REF>
<VOISINS>1803,NW;1806,SW</VOISINS>
</Zone>
<Zone>
<CP>59 650 Villeneuve d'Ascq</CP>
<REF>5903</REF>
<VOISINS>5902,NW;6206,W;6205,S</VOISINS>
</Zone>
<Zone>
<CP>60 000 Beauvais</CP>
<REF>6003</REF>
<VOISINS>6002,NW;6001,S;6004,N</VOISINS>
</Zone>
<Zone>
<CP>60 200 Compiègne</CP>
<REF>6005</REF>
<VOISINS>6003,W;0205,E;6006,S</VOISINS>
</Zone>
<Zone>
<CP>62 300 Lens</CP>
<REF>6205</REF>
<VOISINS>6204,SW;6206,NW</VOISINS>
</Zone>
<Zone>
<CP>63 100 Clermont Ferrand</CP>
<REF>6314</REF>
<VOISINS>6301,NEES;6313,NWWSW</VOISINS>
</Zone>
<Zone>
<CP>64 200 Biarritz</CP>
<REF>6401</REF>
<VOISINS>6402,NE;6404,SW</VOISINS>
</Zone>
<Zone>
<CP>64 230 Lescar</CP>
<REF>6405</REF>
<VOISINS>6403,N</VOISINS>
</Zone>
<Zone>
<CP>66 000 Perpignan</CP>
<REF>6607</REF>
<VOISINS>6608,S;6605,SW;6604,NW</VOISINS>
</Zone>
<Zone>
<CP>67 000 Strasbourg</CP>
<REF>6704</REF>
<VOISINS>6703,N;6702,W</VOISINS>
</Zone>
<Zone>
<CP>68 000 Colmar</CP>
<REF>6802</REF>
<VOISINS>6704,N;6801,W</VOISINS>
</Zone>
<Zone>
<CP>68 100 Mulhouse</CP>
<REF>6803</REF>
<VOISINS>6802,N;6804,S</VOISINS>
</Zone>
<Zone>
<CP>69 009 Lyon</CP>
<REF>6906</REF>
<VOISINS>6907,E;6901,W</VOISINS>
</Zone>
<Zone>
<CP>69 400 Villefranche sur Saone</CP>
<REF>6901</REF>
<VOISINS>6902,W</VOISINS>
</Zone>
<Zone>
<CP>71 000 Macon</CP>
<REF>7104</REF>
<VOISINS>0107,SE</VOISINS>
</Zone>
<Zone>
<CP>71 100 Chalon sur Saone</CP>
<REF>7102</REF>
<VOISINS>7103,E;7105,W;2103,N</VOISINS>
</Zone>
<Zone>
<CP>72 000 Le Mans</CP>
<REF>7203</REF>
<VOISINS>7202,E;7201,S;7204,NW</VOISINS>
</Zone>
<Zone>
<CP>73 000 Chambery</CP>
<REF>7307</REF>
<VOISINS>7306,E;7305,S;0106,E;7403,N</VOISINS>
</Zone>
<Zone>
<CP>73 200 Albertville</CP>
<REF>7301</REF>
<VOISINS>7404,NE;7306,W;7402,NW</VOISINS>
</Zone>
<Zone>
<CP>74 160 Archamps</CP>
<REF>7401</REF>
<VOISINS>7403,SW;7402,SEE</VOISINS>
</Zone>
<Zone>
<CP>76 000 Rouen</CP>
<REF>7604</REF>
<VOISINS>7603,N;2704,SE;2702,SW;2701,W</VOISINS>
</Zone>
<Zone>
<CP>76 370 Neuville les Dieppes</CP>
<REF>7605</REF>
<VOISINS>7603,SE</VOISINS>
</Zone>
<Zone>
<CP>79 000 Niort</CP>
<REF>7904</REF>
<VOISINS>7903,N;8505,NW;1702,SW;7905,E</VOISINS>
</Zone>
<Zone>
<CP>80 000 Amiens</CP>
<REF>8003</REF>
<VOISINS>8004,N;8005,E;8002,W;6004,S</VOISINS>
</Zone>
<Zone>
<CP>81 100 Castres</CP>
<REF>8103</REF>
<VOISINS>8105,NE;8104,S</VOISINS>
</Zone>
<Zone>
<CP>82 005 Montauban</CP>
<REF>8202</REF>
<VOISINS>8205,E;8201,N;8203,W;8205,SE</VOISINS>
</Zone>
<Zone>
<CP>83 160 la Valette</CP>
<REF>8303</REF>
<VOISINS>1311,W;8302,N;8306,NE:8307,E</VOISINS>
</Zone>
<Zone>
<CP>84 000 Avignon</CP>
<REF>8404</REF>
<VOISINS>8405,E;1303,S;3005,W;8401,N</VOISINS>
</Zone>
<Zone>
<CP>85 200 Fontenay le comte</CP>
<REF>8505</REF>
<VOISINS>1702,S;7904,SE</VOISINS>
</Zone>
<Zone>
<CP>86 000 Poitiers</CP>
<REF>8604</REF>
<VOISINS>8602,W;8601,N;8603,E;8605,SW</VOISINS>
</Zone>
<Zone>
<CP>87 000 Limoges</CP>
<REF>8704</REF>
<VOISINS>8703,W;8702,N;8705,S</VOISINS>
</Zone>
</Zones>
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
9 déc. 2005 à 14:55
Tiens en plus propre, plus court et plus rapide et qui marche :



string chemin = "zones.xml";
XmlDocument lesZones =
new XmlDocument();
lesZones.Load(chemin);

// Mon texte (valeur du choix du menu déroulant)
string MonTexte = comboBox1.Text;

// On découpe et on met sous forme d'un tableau
string[] Result_Separation = MonTexte.Split(' ');

string codePostal =
string.Format("{0} {1}",Result_Separation[0], Result_Separation[1]);

string nomVille = MonTexte.Substring(codePostal.Length + 3).Trim();
XmlTextReader reader =
new XmlTextReader("zones.xml");
reader.WhitespaceHandling = WhitespaceHandling.All;

string maRecherche = codePostal + " " + nomVille;
XmlDocument oZones =
new XmlDocument();
oZones.Load(reader);
reader.Close();

//Find the root node,
XmlNode xnod = oZones.DocumentElement;

string sXPath = "//Zones/Zone[CP='" + maRecherche + "']/REF | //Zones/Zone[CP='" + MonTexte + "']/VOISINS";
XmlNodeList oList = oZones.SelectNodes(sXPath);

if (oList.Count>0)
MessageBox.Show(oList[0].OuterXml);

::|The S@ib|::
MVP C#.NET
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
9 déc. 2005 à 14:56
En encore plus propre tu change cette ligne

string maRecherche = codePostal + " " + nomVille;

en :


string maRecherche =
string.Format("{0} {1}",codePostal, nomVille);

::|The S@ib|::
MVP C#.NET
0
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006
9 déc. 2005 à 15:16
Merci beaucoup ... avec ça je devrai comprendre !!!
0
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006
9 déc. 2005 à 17:38
J'en ai une ptite dernière pour le week end ...

Imaginons que mon fichier xml soit de la fomre suivante :





6403
200512011300
20051201
1300

12
P2

90
10









6403
200512011600
20051201
1600

12
P2

65
10









6403
200512011900
20051201
1900

8
P1

-1
0





Comment effectuer une requête Xpath permettant de rechercher les infos en fonction de ZONE ?

Bon week end.
0
Rejoignez-nous