Xpath ??? [Résolu]

nyoto 47 Messages postés mercredi 3 novembre 2004Date d'inscription 2 mai 2006 Dernière intervention - 8 déc. 2005 à 13:45 - Dernière réponse : nyoto 47 Messages postés mercredi 3 novembre 2004Date d'inscription 2 mai 2006 Dernière intervention
- 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 ?
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 9 déc. 2005 à 15:06
3
Merci
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

Merci TheSaib 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de TheSaib
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 8 déc. 2005 à 15:55
0
Merci
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.
Commenter la réponse de TheSaib
nyoto 47 Messages postés mercredi 3 novembre 2004Date d'inscription 2 mai 2006 Dernière intervention - 8 déc. 2005 à 16:11
0
Merci
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 ...)
Commenter la réponse de nyoto
nyoto 47 Messages postés mercredi 3 novembre 2004Date d'inscription 2 mai 2006 Dernière intervention - 8 déc. 2005 à 16:41
0
Merci
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 !!!
Commenter la réponse de nyoto
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 8 déc. 2005 à 16:44
0
Merci
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>
Commenter la réponse de TheSaib
nyoto 47 Messages postés mercredi 3 novembre 2004Date d'inscription 2 mai 2006 Dernière intervention - 8 déc. 2005 à 16:49
0
Merci
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 !!!
Commenter la réponse de nyoto
nyoto 47 Messages postés mercredi 3 novembre 2004Date d'inscription 2 mai 2006 Dernière intervention - 9 déc. 2005 à 11:53
0
Merci
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);


}


}


}
Commenter la réponse de nyoto
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 9 déc. 2005 à 14:34
0
Merci
Parce qu'il cherche "Bourg en bresse" et dans le xml c'est "bourg-en-bresse"
Commenter la réponse de TheSaib
nyoto 47 Messages postés mercredi 3 novembre 2004Date d'inscription 2 mai 2006 Dernière intervention - 9 déc. 2005 à 14:39
0
Merci
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>
Commenter la réponse de nyoto
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 9 déc. 2005 à 14:55
0
Merci
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
Commenter la réponse de TheSaib
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 9 déc. 2005 à 14:56
0
Merci
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
Commenter la réponse de TheSaib
nyoto 47 Messages postés mercredi 3 novembre 2004Date d'inscription 2 mai 2006 Dernière intervention - 9 déc. 2005 à 15:16
0
Merci
Merci beaucoup ... avec ça je devrai comprendre !!!
Commenter la réponse de nyoto
nyoto 47 Messages postés mercredi 3 novembre 2004Date d'inscription 2 mai 2006 Dernière intervention - 9 déc. 2005 à 17:38
0
Merci
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.
Commenter la réponse de nyoto

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.