Parsing xml

duxitto Messages postés 275 Statut Membre -  
duxitto Messages postés 275 Statut Membre -
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
A voir également:

11 réponses

chuka Messages postés 980 Statut Membre 378
 
Salut,
En quel langage tu veux le parser??
0
duxitto Messages postés 275 Statut Membre 1
 
Je suis en asp.net avec C#
0
chuka Messages postés 980 Statut Membre 378
 
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!!
@+
0
duxitto Messages postés 275 Statut Membre 1
 
Merci pour ta réponse, en effet cela m'aide, tu aurais pas une idée sur la suite du traitement ?
Merci
0

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

Posez votre question
duxitto Messages postés 275 Statut Membre 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 :)
0
chuka Messages postés 980 Statut Membre 378
 
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
}
@+
0
duxitto Messages postés 275 Statut Membre 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                          
                    
                    }
  
                                
                }
            }
0
chuka Messages postés 980 Statut Membre 378
 
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");

0
lilli1 Messages postés 100 Statut Membre
 
bonjour,
chuka , tu peux m'aider à comprendre ocl?
0
chuka Messages postés 980 Statut Membre 378
 
dsl...je connais pas....
0
duxitto Messages postés 275 Statut Membre 1
 
Merci pour ta réponse.
0