Parsing xml

Bonjour,
je dispose d'un fichier xml dont la structure est la suivante
<analyses>
   <resultat>

      <dossier>
           <num>*****</num>
           <id>*******</id>
      </dossier>

     <medecin>
       <nom>****</nom>
      <prenom>***</prenom>
    </medecin>
  <resultat> 
  
   <resultat>

      <dossier>
           <num>*****</num>
           <id>*******</id>
      </dossier>

     <medecin>
       <nom>****</nom>
      <prenom>***</prenom>
    </medecin>
  <resultat>   
     .
     .
     .
</analyses>


je souhaiterai extraire a chaque résultat , les données contenues, je ne sais pas comment m'y prendre.

Merci de votre aide
Configuration: Windows XP
Firefox 3.5.6

11 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,
    en C#, tu pourrais avoir un truc du style:
    XmlDocument xml=new XmlDocument ();
    xml.Load(path_vers_ton_fichier_xml);
    XmlNodeList nodelist=xml.GetElementsByTagName("resultat");
    foreach( XmlNode node in nodelist)
    {
    //traitement des données
    }
    J'espere ca pourra t'aider!!
    @+
    1. Merci pour ta réponse, en effet cela m'aide, tu aurais pas une idée sur la suite du traitement ?
      Merci
      1. Je viens de me rendre compte que c'est exactement ce que j'ai fais mais que j'ai oublié de mettre ce bout de code :)
        1. Salut,
          tu peux t'inspirer de cela:
          private void bl()
                  {
                      XmlDocument xml=new XmlDocument ();
                      xml.Load("c:\\Temp\\test.xml");
                      XmlNodeList nodelist=xml.GetElementsByTagName("resultat");
                      foreach( XmlNode node in nodelist)
                      {
                          foreach (XmlNode nod in node.ChildNodes)
                          {
                              if (nod.Name == "dossier")
                              {
                                  foreach (XmlNode no in nod.ChildNodes)
                                  {
                                      richTextBox1.AppendText(nod.Name + " " + no.Name + " " + no.InnerXml+"\n");
                                  }
                              }
                              if (nod.Name == "medecin")
                              {
                                  foreach (XmlNode no in nod.ChildNodes)
                                  {
                                      richTextBox1.AppendText(nod.ParentNode.Name + " " + nod.Name + " " + no.Name + " " + no.InnerXml+"\n");
                                  }
                              }
                          }
                      }
                  }
          

          Mais cela devient vite complexe si ton noeud parent a trop de profondeur!!!
          Le plus simple est un truc du type:
          <analyses>
          <resultat num=*** id=**** medecin="chuka chups"/>
          <resultat num=*** id=**** medecin="tit chups"/>
          <resultat num=*** id=**** medecin="Tat chups"/>
          </analyses>
          apres pour le parser:
          XmlDocument xml=new XmlDocument ();
          xml.Load(path_vers_ton_fichier_xml);
          XmlNodeList nodelist=xml.GetElementsByTagName("resultat");
          string result="";
          foreach( XmlNode node in nodelist)
          {
          result=nod.Attributes["num"].value+" "+nod.Attributes["id"].value+" "+nod.Attributes["medecin"].value;
          //traitement des données
          }
          @+
          1. Merci pour ta réponse. Je dois vérifier si le médecin existe dans la bd ou non , pour cela je suis arrivé à ce stade , il me reste plus qu'a faire ma requête pour voir si il existe ou non. (j'ai changé l'élément médecin par patient)

            
             XmlDocument doc = new XmlDocument();
                        doc.Load(Server.MapPath("~/App_Data/version1.0.xml"));
                        XmlNodeList nodes = doc.DocumentElement.GetElementsByTagName("patient");
                       
                        foreach (XmlNode node in nodes)
                        {
                            foreach (XmlNode noeudenf in node)
                            {
                                if (noeudenf.Name.Equals ("id_patient"))
                                { 
                                
                            // c'est ici que je dois faire ma requête sur la base ASPNETDB (sur la table User car le id_patient est le username dans cette table)  
            si il existe , je dois supprimer ce nœud de mon fichier XML                          
                                
                                }
              
                                            
                            }
                        }
            1. Pour la requete je te laisse voir...
              apres pour supprimer le noeud
              ArrayList ar = new ArrayList(10);
              XmlDocument doc = new XmlDocument();
                          doc.Load(Server.MapPath("~/App_Data/version1.0.xml"));
                          XmlNodeList nodes = doc.DocumentElement.GetElementsByTagName("patient");
                         
                          foreach (XmlNode node in nodes)
                          {
                              foreach (XmlNode noeudenf in node)
                              {
                                  if (noeudenf.Name.Equals ("id_patient"))
                                  { 
                                  
                              // c'est ici que je dois faire ma requête sur la base ASPNETDB (sur la table User car le id_patient est le username dans cette table)  
              si il existe , je dois supprimer ce nœud de mon fichier XML     
              //pour la requete je te laisse faire avec le connecteur qui va bien..je le connait pas..
                                       if (Bon_Resultat)
                                              ar.Add(node)                    
                                  
                                  }
                
                                              
                              }
                          }
                        for (int i=0;i<ar.Count;i++)
                              xml.DocumentElement.RemoveChild(ar[i] as XmlNode);
                          xml.Save("~/App_Data/version1.0.xml");