IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

récupération valeur dans un fichier XML


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut récupération valeur dans un fichier XML
    Bonjour tous le monde,

    après des heures de recherches, je me décide à demander de l'aide.
    mon problème : lire un fichier xml

    j'ai lu beaucoup de choses et tester aussi. mais j'y arrive pas...

    voici mon fichier :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <evenementsPatients 
    xmlns="http://www.hprim.org/hprimXML" 
       acquittementAttendu="non">
    <enteteMessage> 
       <identifiantMessage>120403142713</identifiantMessage>
       <dateHeureProduction>2012-04-03T14:27:13</dateHeureProduction>
       <emetteur>
          <agents>
             <agent 
                categorie="application">
                <code>LOGICIEL</code>
                <libelle>Bureau</libelle>
             </agent>
          </agents>
       </emetteur>
       <destinataire>
          <agents>
             <agent 
                categorie="application">
                <code>test</code>
                <libelle>Application autre</libelle>
             </agent>
          </agents>
       </destinataire>
       <commentaireMessage></commentaireMessage>
    </enteteMessage>
    <evenementPatient>
        <enregistrementPatient action="création">
          <patient>
          <identifiant>
             <emetteur><valeur>00376931</valeur></emetteur> 
          </identifiant>
          <personnePhysique 
             sexe="F">
             <nomUsuel>DURAND</nomUsuel>
             <nomNaissance>DURAND</nomNaissance>
             <alias></alias>
             <prenoms>
                <prenom>MARGUERITE</prenom>
                <prenom></prenom>
                <prenom></prenom>
             </prenoms><civiliteHprim valeur="mme"/>
             <adresses>
                <adresse>
                   <ligne>RUE DE LA GARE</ligne>
                   <ligne></ligne>
                   <ligne></ligne>
                   <ville>NIORT</ville>               
                   <pays>100</pays>
                    <codePostal>45000</codePostal>
                </adresse>
             </adresses>
             <telephones>
                  <telephone>0101010101</telephone>
             </telephones>
             <dateNaissance dateIncertaine="non">
             <date>1947-05-15</date>
             </dateNaissance>
             <lieuNaissance>
                    <ville>TOULON</ville>  
                   <pays>100</pays>
                     <codePostal>83000</codePostal>         
             </lieuNaissance>
              <nationalite>100</nationalite>
              <situationFamilleHprim valeur="aut"></situationFamilleHprim>
    </personnePhysique>
          </patient>
    </enregistrementPatient>
    </evenementPatient>
    </evenementsPatients>

    je dois récupérer certaines valeurs de ce fichier (un fiche par identité ).
    les infos qui m'interesse, sont dans la 2ème partie du fichier <evenementpatient....
    je dois récuperer par exemple nom, prenom, sexe, telephone : ca ok
    mais ca coince sur ville de l'adresse et ville du lieu de naissance.


    si vous avez des idées je prends.
    MERCI

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Peux tu montrer le code que tu as fait ? (Sans oublier les balises de code 'Le # dans la barre d'outils')
    Selon les composants utilisés la solution pourra être différente

    La version de delphi serait aussi bienvenu
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut
    voila ce que j'ai pu faire en récupérant des infos sur le net...

    une procédure pour boucler sur le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    function TFiche_GAPDPI.GetNode(XmlNode : IXmlNode; valeur:string) : IXmlNode;
    var
     i ,k: integer;
    begin
      Result := nil;
     
      if XMLNode.IsTextElement then
        if UpperCase(XmlNode.NodeName) = UpperCase(Valeur) then
        begin
          Result := XmlNode;
          Exit;
        end;
     
      for i := 0 to XMLNode.AttributeNodes.Count - 1 do
      begin
        if UpperCase(XMLNode.AttributeNodes.Nodes[I].NodeName) = Uppercase(valeur) then
        begin
          Result := XMLNode.AttributeNodes.Nodes[I];
          Exit;
        end;
      end;
     
      if XMLNode.HasChildNodes then
        for k:= 0 to XMLNode.ChildNodes.Count - 1 do
        begin
          Result := GetNode(XmlNode.ChildNodes.Nodes[k],valeur);
          // si on a un resultat on quitte car c'est celui qu'on recherche
          if Result <> nil then
            Exit;
        end;
     
    end;

    et ensuite la procédure qui j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    function TFiche_GAPDPI.TraitementFichier(RepF:string;NomF:string):boolean;
    var
    //xml
        Action, ipp, NomPat, PrenomPat, NomJF, SexePat, CivPat : IXMLNode;
        Adr1Pat, VillePat, CpPat, Tel1Pat : IXMLNode;
        Datnaiss, VilNaiss, CpNaiss, SitFamPat : IXMLNode;
        i : integer;
    //WebServices
     
    begin
     // MessageDlg('Traitement fichier :'+RepF+'\'+NomF, mtInformation, [mbOK], 0);
      XMLDoc.FileName := RepF+'\'+NomF;
      XMLDoc.Active := true;
     
      Action := GetNode(XmlDoc.DocumentElement,'ACTION');
      ListBox_Pat.Items.Add(Action.NodeName + ' : '+ Action.text);
     
    //  ipp := GetNode(XMLDoc.DocumentElement,'VALEUR');
    //  ListBox_Pat.Items.Add(ipp.NodeName + ' : '+ ipp.text);
     
      NomPat := GetNode(XmlDoc.DocumentElement,'NOMUSUEL');
      ListBox_Pat.Items.Add(NomPat.NodeName + ' : '+ NomPat.text);
     
      PrenomPat := GetNode(XmlDoc.DocumentElement,'PRENOM');
      ListBox_Pat.Items.Add(PrenomPat.NodeName + ' : '+ PrenomPat.text);
     
      NomJF := GetNode(XmlDoc.DocumentElement,'NOMNAISSANCE');
      ListBox_Pat.Items.Add(NomJF.NodeName + ' : '+ NomJF.text);
     
      SexePat := GetNode(XmlDoc.DocumentElement,'SEXE');
      ListBox_Pat.Items.Add(SexePat.NodeName + ' : '+ SexePat.text);
     
    //  CivPat := GetNode(XmlDoc.DocumentElement,'VALEUR');
    //  ListBox_Pat.Items.Add(CivPat.NodeName + ' : '+ CivPat.text);
     
      Adr1Pat := GetNode(XmlDoc.DocumentElement,'LIGNE');
      ListBox_Pat.Items.Add(Adr1Pat.NodeName + ' : '+ Adr1Pat.text);
     
      VillePat := GetNode(XmlDoc.DocumentElement,'VILLE');
      ListBox_Pat.Items.Add(VillePat.NodeName + ' : '+ VillePat.text);
     
      CpPat := GetNode(XmlDoc.DocumentElement,'CODEPOSTAL');
      ListBox_Pat.Items.Add(CpPat.NodeName + ' : '+ CpPat.text);
     
      Tel1Pat := GetNode(XmlDoc.DocumentElement,'TELEPHONE');
      ListBox_Pat.Items.Add(Tel1Pat.NodeName + ' : '+ Tel1Pat.text);
     
      Datnaiss := GetNode(XmlDoc.DocumentElement,'DATE');
      ListBox_Pat.Items.Add(Datnaiss.NodeName + ' : '+ Datnaiss.text);
    //
    //  VilNaiss := GetNode(XmlDoc.DocumentElement,'VILLE');
    //  ListBox_Pat.Items.Add(VilNaiss.NodeName + ' : '+ VilNaiss.text);
    //
    //  CpNaiss := GetNode(XmlDoc.DocumentElement,'CODEPOSTAL');
    //  ListBox_Pat.Items.Add(CpNaiss.NodeName + ' : '+ CpNaiss.text);
    //
    //  SitFamPat := GetNode(XmlDoc.DocumentElement,'VALEUR');
    //  ListBox_Pat.Items.Add(SitFamPat.NodeName + ' : '+ SitFamPat.text);
     
     
      XMLDoc.Active := False;
     
    ////Préparation webservices...
    pour le moment, mon code s'execute sur un clic bouton et j'alimente une liste.
    tout fonctionne, sauf pour les lignes en commentaires : où ca me retrouve toujours la meme donnée.

    merci.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut
    DELPHI2007

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Mon dieu qu'est ce que j'avais fumé quand j'ai écrit ce code

    En fait le code du GetNode ne fonctionne que dans un xml "simple"

    Il serait peut être mieux de faire autrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    var
      MainNode, 
      evenementPatientNode,
      enregistrementPatientNode,
      personnePhysiqueNode : IXmlNode;
    begin
     
      XMLDoc.FileName := RepF+'\'+NomF;
      XMLDoc.Active := true;
     
      MainNode := XmlDoc.DocumentElement;
      evenementPatientNode := MainNode.ChildsNode.FindNode('evenementPatient');
    While evenementPatientNode <> NIL DO
    begin
      enregistrementPatientNode := evenementPatientNode.ChildsNode['enregistrementPatient'];
      While enregistrementPatientNode <> nil do
      begin
     
        // etc ... juqu'a personnePhysique
        personnePhysiqueNode := (Le Node Précédent).ChildsNode['personnePhysique']
        // Pour récupérer les valeurs du node
        NomPat  := personnePhysiqueNode.ChildValue['nomUsuel'];
        NomNaissance := personnePhysiqueNode.ChildValue['nomNaissance'];
        // Etc .. faire les liens nécessaires après et créer les noeuds du xml si besoin
        enregistrementPatientNode := enregistrementPatientNode.NextSibling; 
      end;
     
      evenementPatientNode := evenementPatientNode.NextSibling;
    end;
    Il y a surement d'autres méthodes qui existent. C'est celle que j'utilise en général.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut
    merci, j'ai tester ce code.

    les boucles se passent bien mais aucune valeur retournée!!
    valeur : null

    (j'ai gardé le test sur le nom)

    ...

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Attention le XMLDocument est sensible à la casse (Majuscule / minuscule)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut
    Bonjour,

    oui, j'ai essayé plusieurs ecritures, plusieurs variables, mais toujours pas de resultat...

    je continue de chercher , mais si vous avez des idées, je prends!!

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération de valeurs dans un fichier XML
    Par thisistheend dans le forum VBScript
    Réponses: 2
    Dernier message: 10/08/2012, 17h35
  2. Difficulté concernant la récupération de valeur dans un fichier xml
    Par Raphael1980 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 12/02/2010, 11h49
  3. Réponses: 6
    Dernier message: 15/02/2008, 11h10
  4. [DOM XML] Modification de valeur dans un fichier XML
    Par scorpion1611 dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 05/09/2007, 14h53
  5. Modifier une valeur dans un fichier xml
    Par arthrax dans le forum VBScript
    Réponses: 3
    Dernier message: 03/04/2007, 09h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo