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

Delphi Discussion :

Parcourir les noeuds d'un XML


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Par défaut Parcourir les noeuds d'un XML
    J'ai un fichier XML qui a la structure suivante :
    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
    <Test>
         <Liste_Ville>
              <Ville>
                   <Nom Attribut="False"> A </Nom>
                   <CP Attribut="False"> 000001 </CP>
              </Ville>
              <Ville>
                   <Nom Attribut="False"> B </Nom>
                   <CP Attribut="False"> 000002 </CP>
              </Ville>
    .................... etc .......................
         </Liste_Ville>
         <Liste_Pays>
              <Pays>
                   <Nom Attribut="False"> P1 </Nom>
                   <Code Attribut="False"> P1-000001 </Code>
              </Pays>
              <Pays>
                   <Nom Attribut="False"> P2 </Nom>
                   <Code Attribut="False"> P2-000002 </Code>
              </Pays>
    .................... etc .......................
         </Liste_Pays>
    </Test>
    Je voudrai mettre tous mes attributs de noeuds CP des villes et Code des pays à True.
    Je n'arrive à le faire que pour la première ville et le premier pays car en utilisant les propriétés ChildNodes, je me retrouve toujours sur le premier de chaque liste.
    Existe-t-il le moyen après s'être positionné sur le noeud Liste_Ville de parcourir tous ses noeuds enfants et en testant leur nom de modifier ensuite l'attribut ? Si oui comment ( je n'ai pas toruvé de next ou quelque chose comme cela ).
    Merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut
    Salut,

    Voilà ce que je te propose :
    Pour tous les noeuds xml, si un attribut est nommé 'Attribut' alors on modifie sa valeur à 'True'.
    Avec une belle procedure récursive.

    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
       nI : Integer;
    begin
         Try
            XMLDocument1.LoadFromFile( ExtractFilePath(Application.ExeName) + 'test.xml' );
     
            for nI := 0 to Pred(XMLDocument1.Node.ChildNodes.Count) do
              ChangeAttribut( XMLDocument1.Node.ChildNodes[nI], 'Attribut', 'True' );
         Except
               On E: Exception do
                 MessageDlg( E.Message, mtError, [mbOK], 0 );
         End;
    end;
     
    procedure TForm1.ChangeAttribut(aNode: IXMLNode; aAttibut: WideString; aValue: OleVariant);
    var
       nI,
       nJ  : Integer;
    begin
         for nI := 0 to Pred( aNode.ChildNodes.Count ) do
         begin
              for nJ := 0 to Pred( aNode.AttributeNodes.Count ) do
                if aNode.AttributeNodes[nJ].NodeName = aAttibut then
                  aNode.AttributeNodes[nJ].NodeValue := aValue;
     
              ChangeAttribut( aNode.ChildNodes[nI], aAttibut, aValue );
         end;
    end;
    Bonne prog...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Par défaut
    Merci beaucoup.
    Cela me convient super bien après quelques modifications.
    Merci.....

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

Discussions similaires

  1. [DOM] Parcourir et supprimer les noeuds d'un XML
    Par bankette dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/08/2012, 14h48
  2. Parser à la volée les noeuds d'un XML.
    Par ziad.shady dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 18/06/2010, 15h00
  3. Réponses: 2
    Dernier message: 06/08/2008, 09h24
  4. Réponses: 15
    Dernier message: 16/04/2008, 11h16
  5. Parcourir les noeuds d'un TreeView
    Par Andry dans le forum Composants VCL
    Réponses: 4
    Dernier message: 08/11/2005, 07h11

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