Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Lire un fichier XML [ Base de données / XML ] (snakzbenjy)

mardi 8 avril 2008 à 14:47:15 | Lire un fichier XML

snakzbenjy

Bonjour à tous,

Alors voilà j'ai un fichier XML de ce type la:
<?xml version="1.0" ?>
-<root>
-<Controls>
-    <Control>
      <Type>ComboBox</Type>
     <Name>comboBox1</Name>
-    <Values>
        <Value>Donnée combo 1</Value>
        <Value>Donnée combo 2</Value>
     <Value>Donnée combo 3</Value>
 </Values>
 </Control>
-<Control>
 <Type>ListBox</Type>
 <Name>listBox1</Name>
-<Values>
     <Value>Donnée liste 1</Value>
     <Value>Donnée liste 2</Value>
    <Value>Donnée liste 3</Value>
</Values>
</Control>
</Controls>
</root>


Je cherche à récupérer dans une listbox ses informations.
exemple:
                     ComboBox1
                        Donnée combo 1
                        Donnée combo 2
                        Donnée combo 3

                     ListBox1
                        Donnée liste 1
                        Donnée liste 2
                        Donnée liste 3

Voilà mon code:

privateint ReadXml()

{

      XmlDocument doc = newXmlDocument();
       doc.Load(
"exemple.xml");

      XmlNodeList xNod = doc.SelectNodes("//Controls");
      
foreach (object title in xNod)

      {

            XmlNodeList xNode = doc.SelectNodes("//Control");

            foreach (XmlNode titlee in xNode)

            {

                  XmlNode xNodess = doc.SelectSingleNode("//Name");

                  string aa = xNodess.InnerText;

                  XmlNodeList xNodee = doc.SelectNodes("//Value");

                  foreach (XmlNode titleee in xNodee)

                  {

                        XmlNode xNodeess = doc.SelectSingleNode("//Value");

                        string aaa = xNodeess.InnerText;

                     }

               }

      }

return 1;

}

Donc enfaite je souhaite avoir dans ma variable "aa" le nom et dans ma variable "aaa" la valeur.
mais le problème c'est que en faite dans ma variable "aaa" il me nomme a la suite:

                        Donnée combo 1
                        
Donnée combo 2
                        Donnée combo 3

                        Donnée liste 1
                        Donnée liste 2
                        Donnée liste 3

C a d il ne tien pas compte des noeuds. Comment avoir que les valeurs du noeud du combobox

Merci à tous

benjy






















mardi 8 avril 2008 à 15:12:40 | Re : Lire un fichier XML

billou_13

Membre Club
Salut,

Il ne faut pas faire:
doc.SelectNodes("//Value");
Car ceci va te donner tous les noeuds "Value" de ton document XML.

Le principe consiste à jour avec ta ligne :
XmlNodeList xNod = doc.SelectNodes("//Controls");
La liste te retourne tous les controls que tu souhaites.
Ensuite, tu peux prendre les valeurs souhaitées en faisant:
XmlNodeList xNodee = xNod.SelectNodes("/Values/Value");//Tu travailles avec ton noeud control uniquement

Voila le principe. Il ne faut pas jouer qu'avec le XmlDocument "doc". Il faut parcourir en profondeur :
1) Sélection de tous les controles
2) Sélection des valeurs de chaque noeud control

Bonne journée,

Billou_13

mardi 8 avril 2008 à 15:39:25 | Re : Lire un fichier XML

snakzbenjy

Merci,

Je comprend le principe.
Le compilateur me dit que "XmlNodeList" le contient pas de définition pour "SelectNodes":

Imposible de faire:  XmlNodeList xNodee = xNod.SelectNodes("/Values/Value");

Tu sais pourquoi?

Merci.

Benjy

mardi 8 avril 2008 à 16:04:18 | Re : Lire un fichier XML

billou_13

Membre Club
Oui pardon c'est exact ! Autant pour moi (faute d'inattention) !
Tu ne peux sélectionner un XPath pour une liste de noeud car il ne sera pas sur quel noeud recherché ^^.

Il faut faire:

XmlNodeList xNod = doc.SelectNodes("//Controls");
foreach (XmlNode curNode in xNod)
{
   //... Ton code

   XmlNodeList xNodee = curNode.SelectNodes("/Values/Value");//Sur le noeud parcouru
}

Et en plus, c'est plus pratique (et spécifique) que :
foreach (object title in xNod)

Bon courage,

Billou_13

mardi 8 avril 2008 à 16:15:45 | Re : Lire un fichier XML

billou_13

Membre Club
Décidement, je suis abonné aux petites fautes. Je te propose donc refaire le parcours complet du code ^^. Tu m'en voudras pas j'espère :

privateint ReadXml()
{
      XmlDocument doc = newXmlDocument();
      doc.Load("exemple.xml");

      //Récupération de tous les noeuds 'Controls'
      XmlNodeList controlsNodes = doc.SelectNodes("//Controls");
      foreach (XmlNode curControls in controlsNodes)
      {
            //Récupération de tous les noeuds 'Control'
            XmlNodeList controlNodes = curControls.SelectNodes("//Control");
            foreach (XmlNode curControl in controlNodes)
            {
                  //Récupération du noeud 'Name'
                  XmlNode curName = curControl.SelectSingleNode("/Name");
                  string name = curName.InnerText;

                  //Récupération de tous les noeuds 'Value'
                  XmlNodeList valueNodes = curControl.SelectNodes("/Values/Value");
                  foreach (XmlNode curValue in valueNodes)
                  {
                        string value = curValue.InnerText;
                  }
            }
      }
      return 1;
}

mardi 8 avril 2008 à 16:47:16 | Re : Lire un fichier XML

snakzbenjy

Non je ne t'en veux pas ^^

Je ne sais pas si tu l'as testé mais il ne récupére pas le noeud "Name".

                //Récupération du noeud 'Name'
                  XmlNode curName = curControl.SelectSingleNode("/Name");
                  string name = curName.InnerText;

Quand je débug il n'y a rien dans curName.

Dans le chemin il y a qu'un seul slach? ("//Name"); ou ("Name"); ??

merci

Benjy

mardi 8 avril 2008 à 16:49:45 | Re : Lire un fichier XML

snakzbenjy

Je répond à ma question tout seul!

ce n'est pas ("//Name");

Sinon il reprend le chemin complet.

Pourquoi ca ne marche pas sinon?

Il compile aucune erreur mais il n'y a rien dans curName

mardi 8 avril 2008 à 17:05:13 | Re : Lire un fichier XML

billou_13

Membre Club
Réponse acceptée !
Bon, c'est la dernière cette fois-ci ^^
remplace les lignes suivantes:
XmlNodeList controlNodes = curControls.SelectNodes("//Control");
XmlNode curName = curControl.SelectSingleNode("/Name");
XmlNodeList valueNodes = curControl.SelectNodes("/Values/Value");

Par
XmlNodeList controlNodes = curControls.SelectNodes("./Control");
XmlNode curName = curControl.SelectSingleNode("./Name");
XmlNodeList valueNodes = curControl.SelectNodes("./Values/Value");

J'avais oublié le point. Ca faisait un bout de temps que j'avais pas touché au XML. Mais cette fois ci, j'ai testé !

Bonne soirée,

Billou_13

mardi 8 avril 2008 à 17:12:08 | Re : Lire un fichier XML

snakzbenjy

wouuuuuu c'est magique.

merci billou..

Désoler de t'avoir fait replongé dedans ^^

Benjy

mardi 8 avril 2008 à 17:17:35 | Re : Lire un fichier XML

billou_13

Membre Club
Pour être plus clair et synthétique sur les différentes valeur XPath (dans XmlNode.SelectNodes(xpath); :
1) //node indique que tu cherches les noeuds "node" quelque que soit la hiérarchie de profondeur.
2) ./node indique que tu cherches les noeuds fils "node" uniquement (n-1 en gros)

./ est donc plus adapté que // dans ton cas.

Et tu peux faire bien plus et beaucoup plus puissant. Je te conseilles pour cela fortement de regarder le tutorial très bien fait de Bidou:
http://www.csharpfr.com/tutorial.aspx?id=536

Bonne soirée,

Billou_13



Cette discussion est classé dans : donnée, liste, doc, combo, value


Répondre à ce message

Sujets en rapport avec ce message

Liste de police dans un combo [ par sebastiencarrer ] Comment creer un combobox qui m affiche la liste des polices disponibles?Seb Attacher une liste a un combo [ par olibara ] Bonjour,Je ne parviens pas a attacher une liste a un ComboBoxJe declare une listeclass Hotel{  int Id;  int Nom;}List Hotels=new List();cmb.DataSourc DataGridView et combobox [ par kaoutara_hajji ] Bonjour tout le monde , ca fait une semaine que je bloque sur un probleme et j'arrive pas a le resoudre , et j'espere que vous puissiez m'aider, j'ai Problème avec une dll [ par veler ] Salut à tous, pour le logiciel que créer en VB.Net, j'utilise une dll dans lequel on trouve le code suivant. Cette dll permet d'enregistrer dans un xm Récupérer la doc du code pendant l'exécution du programme [ par maitredede ] Bonjour,Je voudrais savoir si pendant l'exécution de mon programme il est possible de récupérer la doc d'une méthode, celle qu'on ajoute dans le code Dupliquer une base de donnée Oracle [ par benito16 ] Bonjour,Je souhaiterai dupliquer une base de données Oracle afin de pouvoir travailler sur une base test sans modifier celle d'origine.Est-ce possible liste des fichiers recents(comme word) [ par vboussema ] salut; j'ai une application qui ouvre des fichiers et je veut à chaque foi que j'ouvre mon application que je trouve les fichiers récents(la liste fes AsyncCallBack, Délégué et Galere ! [ par PORTE_BLINDEE ] Voila jeffectue une requete web asynchrone et je souhaite traiter le code HTML ressu, le parser et afficher les resultats dans une liste viewvoici le Vidéo en XAML / C# [ par CrazyJoe1 ] Bonjour à tous,Je suis en train de concevoir un programme avec une interface XAML qui doit affichier une liste de vidéo issue d'un fichier RSS (celui BindingListView : déclancher le filtrage dans un thread [ par mathmax ] Bonjour, quelqu'un m'avais conseillé cette très bonne implémentation d'une BindingListView. J'aimerais cependant déclencher le filtrage dans un Thread


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.