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 :

Problème pour traiter un XML


Sujet :

Delphi

  1. #21
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut
    En effectuant un debugage, j'ai constater la chose suivante :

    E2171 La variable 'Doc' est inaccessible ici du fait de l'optimisation

    Peut-être que cela pourra vous aider

    PS : J'ai trouvé ceci

    Citation Envoyé par Franck SORIANO Voir le message
    Le thread n'a rien a voir la dedans.

    C'est une option de compilation.
    Tu vas dans Projet->Options, quelque part tu dois avoir "Compilation" et une option "Optimisation" que tu peux désactiver.

    Désolé, je n'ai pas D2009, je ne peux pas t'indiquer l'emplacement exact de cette option. Mais ça doit être quelque part dans le coin.
    Alors j'ai fais ça mais pour ma part ça n'a rien changé...
    Java c'est pas de la menthe a l'eau
    Et n'oubliez pas : Ne pas respirer tue...
    Mon BLOOOUUUG Un site trop bien

    Pour la recherche JAVA des liens pratiques :
    GOOGLE LA JAVADOC LES FAQ LES ARCHIVES

  2. #22
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    @ Aka

    La déclaration Doc :IXMLDocument fonctionne très bien. Ce serait une autre histoire si on lui assignait un propriétaire à la création .

  3. #23
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut
    @ Andnotor :

    Le code que vous m'avez passer ne fonctionne pas, pour la simple raison qu'il y a une erreur :

    Citation Envoyé par Aka Guymelef Voir le message
    Reprend le code de AndNotOr posté au début, il t'a fournit un exemple complet sur lequel tu devrais prendre appuis et repartir de zéro avec, et ne plus te polluer avec ton implémentation précédente.

    Par contre il y avait une petite erreur dedans que j'ai corrigé :
    Il me semble avoir vu que c'était au niveau de la déclaration de la variable Doc. Ce qui as supprimer mes problèmes. Pour le reste, c'est certainement très bon, mais le soucis c'est que j'ai ce message qui me dis que la variable 'Doc' est inaccessible du fait de l'optimisation... Chose complètement incompréhensible pour moi...

    Merci de votre aide
    Java c'est pas de la menthe a l'eau
    Et n'oubliez pas : Ne pas respirer tue...
    Mon BLOOOUUUG Un site trop bien

    Pour la recherche JAVA des liens pratiques :
    GOOGLE LA JAVADOC LES FAQ LES ARCHIVES

  4. #24
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    J'ai bien compris.

    Sache cependant que si je ne suis pas sûr de mon coup, je fais un test. Et si je n'ai pas le temps, je ne donne pas mon avis .
    Cette déclaration fonctionne au minimum depuis D7. Si tu utilises une version antérieure, peut-être que ça coince...

    Pour le message:
    Cette variable n'est plus utilisée après ton point d'arrêt et elle a déjà été supprimée de la pile (Optimisation). Ce n'est pas une erreur.

  5. #25
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut
    Je suis sur D7. Je vais remettre mon code en entier, tu me dira ce que tu vois qui ne vas pas :

    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
     
    procedure Tanalyses.FillFromXML(aFileName: TFileName);
    var
     REJ_DATE_ANALYSE, REJ_MOIS_FACTURATION, ECH_DATE_COLLECTE, ECH_DATE_PRELEV, TOU_ID_DATE_DEB :tdate;
     VERSION, REM_NOMBRE_RECIDIVE, REM_NOTE_MENSUELLE, REM_NOMBRE_MOIS, REJ_NOTE,
     REJ_UME_VALEUR_RES, TRN_ID_CODE, ECH_ORDRE_PRELEV, ECH_RANG_PRELEV, TOU_ID_NUMERO, NBENR : integer;
     NUMSEQ, ENT_ID_CODE_LAB, IDDEST, IDFICHIER, TYPE_EXPORT, ENT_ID_CODE_PRD, REM_MOIS_FACTURATION,
     RF_CRI_ID_CODE, RF_TRM_ID_CODE, ENT_ID_CODE_CA, RF_ESP_ID_CODE, RF_NAT_ID_CODE, RF_AIP_ID_CODE,
     ENT_ID_CODE_CC, ECH_CODE_LABO, RF_MET_ID_CODE, RF_SRJ_ID_CODE, RF_UME_ID_CODE, REM_RECIDIVE,
     REM_PENALITE_MOIS, REM_POUR_PAIEMENT, REM_DIFFUSION_PULL, REM_CLASSE_MENSUELLE,
     REM_RECLASSEMENT, REM_CLASSE_MENSUELLE_PAIE, REJ_PENALISATION_JOUR, REJ_DIFFUSION_PULL,
     ECH_CODE_INTERNE_LABO, RF_SEC_ID_CODE, ECH_ANOMALIE, ECH_COMMENTAIRE : string;
     Doc :TXMLDocument;
     
    begin
      Doc := TXMLDocument.Create(nil);
      Doc.LoadFromFile(aFileName);
     
      // <FIC_XML>
      with Doc.DocumentElement do
      begin
     
        // <DEB>
        with ChildNodes['DEB'] do
        begin
          NUMSEQ          := ChildNodes['NUMSEQ'].Text;
          ENT_ID_CODE_LAB := ChildNodes['ENT_ID_CODE_LAB'].Text;
        end;
        // <REM>
     
      end;
    end;
    Merci pour tes réponses
    Java c'est pas de la menthe a l'eau
    Et n'oubliez pas : Ne pas respirer tue...
    Mon BLOOOUUUG Un site trop bien

    Pour la recherche JAVA des liens pratiques :
    GOOGLE LA JAVADOC LES FAQ LES ARCHIVES

  6. #26
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Testé sous D2007.

    1° : Violation d'accès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
      Doc :TXMLDocument;
    
    begin
      Doc := TXMLDocument.Create(nil);
      Doc.LoadFromFile(aFileName);
      ...
    end;
    2° : Fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
      Doc :TXMLDocument;
    
    begin
      Doc := TXMLDocument.Create(Self);
      Doc.LoadFromFile(aFileName);
      ...
      Doc.Free;
    end;
    3° : Fonctionne (Normal puisque cette construction (propriétaire à nil) nous renvoi une interface)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
      Doc :IXMLDocument;
    
    begin
      Doc := TXMLDocument.Create(nil);
      Doc.LoadFromFile(aFileName);
      ...
    end;

  7. #27
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut
    Pour ton 3ème point :

    Ne fonctionne pas puisque j'ai les erreurs suivantes :

    [DCC Erreur] fi_analyses.pas(85): E2010 Types incompatibles : 'IXMLDocument' et 'TXMLDocument'

    [DCC Erreur] fi_analyses.pas(86): E2003 Identificateur non déclaré : 'LoadFromFile'

    [DCC Erreur] fi_analyses.pas(89): E2003 Identificateur non déclaré : 'DocumentElement'

    [DCC Erreur] fi_analyses.pas(89): E2003 Identificateur non déclaré : 'DocumentElement'

    Et j'en passe...

    En revanche, visiblement l'option 2 fonctionne... Je test et je vous dis.

    Encore merci
    Java c'est pas de la menthe a l'eau
    Et n'oubliez pas : Ne pas respirer tue...
    Mon BLOOOUUUG Un site trop bien

    Pour la recherche JAVA des liens pratiques :
    GOOGLE LA JAVADOC LES FAQ LES ARCHIVES

  8. #28
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Salut,

    les uses a utiliser en tout cas avec D2009 mais j'imagine qu'avec les versions précédente c'est pareil.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ...XMLIntf, XMLDoc...
    L'option 3 de AndNotor doit fonctionner car TXMLDocument implémente IXMLDocument.
    Akim Merabet

  9. #29
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut
    J'ai bien fais de ne pas avoir mis le Tag Résolus tout de suite... Puisque j'ai un petit problème... Maintenant que ma lecture marche, je vais parcourir les enfants du premier nœud, (le with childnode['DEB'] do) mais quand je parcours le deuxième nœud (with childnode['REM'] do) ben je ne récupère aucune donnée... Je ne vois pas pourquoi... Je vous poste mon code complet

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
     
    procedure Tanalyses.FillFromXML(aFileName: TFileName);
    var
     REJ_DATE_ANALYSE, REJ_MOIS_FACTURATION, ECH_DATE_COLLECTE, ECH_DATE_PRELEV, TOU_ID_DATE_DEB :tdate;
     VERSION, REM_NOMBRE_RECIDIVE, REM_NOTE_MENSUELLE, REM_NOMBRE_MOIS, REJ_NOTE,
     REJ_UME_VALEUR_RES, TRN_ID_CODE, ECH_ORDRE_PRELEV, ECH_RANG_PRELEV, TOU_ID_NUMERO, NBENR : integer;
     NUMSEQ, NUMSEQ1, NUMSEQ2, NUMSEQ3, NUMSEQ4, ENT_ID_CODE_LAB, IDDEST, IDFICHIER, TYPE_EXPORT,
     ENT_ID_CODE_PRD, REM_MOIS_FACTURATION, RF_CRI_ID_CODE, RF_TRM_ID_CODE, ENT_ID_CODE_CA,
     RF_ESP_ID_CODE, RF_NAT_ID_CODE, RF_AIP_ID_CODE, ENT_ID_CODE_CC, ECH_CODE_LABO,
     RF_MET_ID_CODE, RF_SRJ_ID_CODE, RF_UME_ID_CODE, REM_RECIDIVE, REM_PENALITE_MOIS,
     REM_POUR_PAIEMENT, REM_DIFFUSION_PULL, REM_CLASSE_MENSUELLE, REM_RECLASSEMENT,
     REM_CLASSE_MENSUELLE_PAIE, REJ_PENALISATION_JOUR, REJ_DIFFUSION_PULL,
     ECH_CODE_INTERNE_LABO, RF_SEC_ID_CODE, ECH_ANOMALIE, ECH_COMMENTAIRE : string;
     Doc :TXMLDocument;
     
    begin
       Doc := TXMLDocument.Create(Self);
       Doc.LoadFromFile(aFileName);
     
       // <FIC_XML>
       with Doc.DocumentElement do
       begin
          // <DEB>
          with ChildNodes['DEB'] do
          begin
             NUMSEQ          := ChildNodes['NUMSEQ'].Text;
             ENT_ID_CODE_LAB := ChildNodes['ENT_ID_CODE_LAB'].Text;
             IDDEST          := ChildNodes['IDDEST'].Text;
             IDFICHIER       := ChildNodes['IDFICHIER'].Text;
             TYPE_EXPORT     := ChildNodes['TYPE_EXPORT'].Text;
             VERSION         := StrToInt(ChildNodes['VERSION'].Text);
     
             labelAction.Caption  := 'Lecture des données...';
             // c'est là qu'il faut faire le append
             dm.analyse.first;
             if not dm.analyse.locate('an_NUMSEQ',NUMSEQ,[]) then
             begin
                dm.analyse.Append;
                dm.analyse['an_NUMSEQ']:= NUMSEQ;
                dm.analyse['an_ENT_ID_CODE_LAB']:= ENT_ID_CODE_LAB;
                dm.analyse['an_IDDEST']:= IDDEST;
                dm.analyse['an_IDFICHIER']:= IDFICHIER;
                dm.analyse['an_TYPE_EXPORT']:= TYPE_EXPORT;
                dm.analyse['an_VERSION']:= VERSION;
                dm.analyse.Post;
             end;
     
             // <REM>
             with ChildNodes['REM'] do
             begin
                NUMSEQ1                   := ChildNodes['NUMSEQ'].Text;
                ENT_ID_CODE_PRD           := ChildNodes['ENT_ID_CODE_PRD'].Text;
                REM_MOIS_FACTURATION      := ChildNodes['REM_MOIS_FACTURATION'].Text;
                RF_CRI_ID_CODE            := ChildNodes['RF_CRI_ID_CODE'].Text;
                RF_TRM_ID_CODE            := ChildNodes['RF_TRM_ID_CODE'].Text;
                ENT_ID_CODE_CA            := ChildNodes['ENT_ID_CODE_CA'].Text;
                RF_ESP_ID_CODE            := ChildNodes['RF_ESP_ID_CODE'].Text;
                RF_NAT_ID_CODE            := ChildNodes['RF_NAT_ID_CODE'].Text;
                REM_RECIDIVE              := ChildNodes['REM_RECIDIVE'].Text;
                REM_NOMBRE_RECIDIVE       := StrToInt(ChildNodes['REM_NOMBRE_RECIDIVE'].Text);
                REM_PENALITE_MOIS         := ChildNodes['REM_PENALITE_MOIS'].Text;
                REM_POUR_PAIEMENT         := ChildNodes['REM_POUR_PAIEMENT'].Text;
                REM_DIFFUSION_PULL        := ChildNodes['REM_DIFFUSION_PULL'].Text;
                RF_AIP_ID_CODE            := ChildNodes['RF_AIP_ID_CODE'].Text;
                ENT_ID_CODE_CC            := ChildNodes['ENT_ID_CODE_CC'].Text;
                REM_CLASSE_MENSUELLE      := ChildNodes['REM_CLASSE_MENSUELLE'].Text;
                REM_RECLASSEMENT          := ChildNodes['REM_RECLASSEMENT'].Text;
                REM_CLASSE_MENSUELLE_PAIE := ChildNodes['REM_CLASSE_MENSUELLE_PAIE'].Text;
                REM_NOTE_MENSUELLE        := StrToInt(ChildNodes['REM_NOTE_MENSUELLE'].Text);
                REM_NOMBRE_MOIS           := StrToInt(ChildNodes['REM_NOMBRE_MOIS'].Text);
     
                labelAction.Caption  := 'Lecture des données...';
                // c'est là qu'il faut faire le append
                dm.analyse.first;
                if not dm.analyse.locate('an_NUMSEQ',NUMSEQ,[]) then
                begin
                   dm.analyse.Append;
                   dm.analyse['an_NUMSEQ']:= NUMSEQ;
                   dm.analyse['an_ENT_ID_CODE_PRD']:= ENT_ID_CODE_PRD;
                   dm.analyse['an_REM_MOIS_FACTURATION']:= REM_MOIS_FACTURATION;
                   dm.analyse['an_REM_NOMBRE_MOIS']:= REM_NOMBRE_MOIS;
                   dm.analyse['an_RF_CRI_ID_CODE']:= RF_CRI_ID_CODE;
                   dm.analyse['an_RF_TRM_ID_CODE']:= RF_TRM_ID_CODE;
                   dm.analyse['an_ENT_ID_CODE_CA']:= ENT_ID_CODE_CA;
                   dm.analyse['an_RF_ESP_ID_CODE']:= RF_ESP_ID_CODE;
                   dm.analyse['an_RF_NAT_ID_CODE']:= RF_NAT_ID_CODE;
                   dm.analyse['an_REM_RECIDIVE']:= REM_RECIDIVE;
                   dm.analyse['an_REM_NOMBRE_RECIDIVE']:= REM_NOMBRE_RECIDIVE;
                   dm.analyse['an_REM_PENALITE_MOIS']:= REM_PENALITE_MOIS;
                   dm.analyse['an_REM_POUR_PAIEMENT']:= REM_POUR_PAIEMENT;
                   dm.analyse['an_REM_DIFFUSION_PULL']:= REM_DIFFUSION_PULL;
                   dm.analyse['an_REM_CLASSE_MENSUELLE']:= REM_CLASSE_MENSUELLE;
                   dm.analyse['an_REM_RECLASSEMENT']:= REM_RECLASSEMENT;
                   dm.analyse['an_REM_CLASSE_MENSUELLE_PAIE']:= REM_CLASSE_MENSUELLE_PAIE;
                   dm.analyse['an_REM_NOTE_MENSUELLE']:= REM_NOTE_MENSUELLE;
                   dm.analyse['an_REM_NOMBRE_MOIS']:= REM_NOMBRE_MOIS;
                   dm.analyse.Post;
                end;
     
                // <RJM>
                with ChildNodes['RJM'] do
                begin
                   NUMSEQ2               := ChildNodes['NUMSEQ'].Text;
                   ECH_CODE_LABO         := ChildNodes['ECH_CODE_LABO'].Text;
                   RF_MET_ID_CODE        := ChildNodes['RF_MET_ID_CODE'].Text;
                   RF_CRI_ID_CODE        := ChildNodes['RF_CRI_ID_CODE'].Text;
                   REJ_DATE_ANALYSE      := StrToDate(ChildNodes['REJ_DATE_ANALYSE'].Text);
                   REJ_MOIS_FACTURATION  := StrToDate(ChildNodes['REJ_MOIS_FACTURATION'].Text);
                   RF_SRJ_ID_CODE        := ChildNodes['RF_SRJ_ID_CODE'].Text;
                   REJ_PENALISATION_JOUR := ChildNodes['REJ_PENALISATION_JOUR'].Text;
                   REJ_DIFFUSION_PULL    := ChildNodes['REJ_DIFFUSION_PULL'].Text;
                   REJ_NOTE              := StrToInt(ChildNodes['REJ_NOTE'].Text);
                   REJ_UME_VALEUR_RES    := StrToInt(ChildNodes['REJ_UME_VALEUR_RES'].Text);
                   RF_UME_ID_CODE        := ChildNodes['RF_UME_ID_CODE'].Text;
     
                   labelAction.Caption  := 'Lecture des données...';
                   // c'est là qu'il faut faire le append
                   dm.analyse.first;
                   if not dm.analyse.locate('an_NUMSEQ',NUMSEQ,[]) then
                   begin
                      dm.analyse.Append;
                      dm.analyse['an_NUMSEQ']:= NUMSEQ;
                      dm.analyse['an_ECH_CODE_LABO']:= ECH_CODE_LABO;
                      dm.analyse['an_RF_MET_ID_CODE']:= RF_MET_ID_CODE;
                      dm.analyse['an_RF_CRI_ID_CODE']:= RF_CRI_ID_CODE;
                      dm.analyse['an_REJ_DATE_ANALYSE']:= REJ_DATE_ANALYSE;
                      dm.analyse['an_REJ_MOIS_FACTURATION']:= REJ_MOIS_FACTURATION;
                      dm.analyse['an_RF_SRJ_ID_CODE']:= RF_SRJ_ID_CODE;
                      dm.analyse['an_REJ_PENALISATION_JOUR']:= REJ_PENALISATION_JOUR;
                      dm.analyse['an_REJ_DIFFUSION_PULL']:= REJ_DIFFUSION_PULL;
                      dm.analyse['an_REJ_NOTE']:= REJ_NOTE;
                      dm.analyse['an_REJ_UME_VALEUR_RES']:= REJ_UME_VALEUR_RES;
                      dm.analyse['an_RF_UME_ID_CODE']:= RF_UME_ID_CODE;
                      dm.analyse.Post;
                   end;
                end;
     
                with ChildNodes['ECM'] do
                begin
                   NUMSEQ3               := ChildNodes['NUMSEQ'].Text;
                   ECH_CODE_LABO         := ChildNodes['ECH_CODE_LABO'].Text;
                   ECH_CODE_INTERNE_LABO := ChildNodes['ECH_CODE_INTERNE_LABO'].Text;
                   RF_ESP_ID_CODE        := ChildNodes['RF_ESP_ID_CODE'].Text;
                   RF_NAT_ID_CODE        := ChildNodes['RF_NAT_ID_CODE'].Text;
                   ENT_ID_CODE_CC        := ChildNodes['ENT_ID_CODE_CC'].Text;
                   TRN_ID_CODE           := StrToInt(ChildNodes['TRN_ID_CODE'].Text);
                   TOU_ID_NUMERO         := StrToInt(ChildNodes['TOU_ID_NUMERO'].Text);
                   TOU_ID_DATE_DEB       := StrToDate(ChildNodes['TOU_ID_DATE_DEB'].Text);
                   ECH_DATE_PRELEV       := StrToDate(ChildNodes['ECH_DATE_PRELEV'].Text);
                   ECH_DATE_COLLECTE     := StrToDate(ChildNodes['ECH_DATE_COLLECTE'].Text);
                   ECH_RANG_PRELEV       := StrToInt(ChildNodes['ECH_RANG_PRELEV'].Text);
                   ECH_ORDRE_PRELEV      := StrToInt(ChildNodes['ECH_ORDRE_PRELEV'].Text);
                   ENT_ID_CODE_CA        := ChildNodes['ENT_ID_CODE_CA'].Text;
                   ENT_ID_CODE_PRD       := ChildNodes['ENT_ID_CODE_PRD'].Text;
                   RF_SEC_ID_CODE        := ChildNodes['RF_SEC_ID_CODE'].Text;
                   ECH_ANOMALIE          := ChildNodes['ECH_ANOMALIE'].Text;
                   ECH_COMMENTAIRE       := ChildNodes['ECH_COMMENTAIRE'].Text;
     
                   labelAction.Caption  := 'Lecture des données...';
                   // c'est là qu'il faut faire le append
                   dm.analyse.first;
                   if not dm.analyse.locate('an_NUMSEQ',NUMSEQ,[]) then
                   begin
                      dm.analyse.Append;
                      dm.analyse['an_NUMSEQ']:= NUMSEQ;
                      dm.analyse['an_ECH_CODE_LABO']:= ECH_CODE_LABO;
                      dm.analyse['an_ECH_CODE_INTERNE_LABO']:= ECH_CODE_INTERNE_LABO;
                      dm.analyse['an_RF_ESP_ID_CODE']:= RF_ESP_ID_CODE;
                      dm.analyse['an_RF_NAT_ID_CODE']:= RF_NAT_ID_CODE;
                      dm.analyse['an_ENT_ID_CODE_CC']:= ENT_ID_CODE_CC;
                      dm.analyse['an_TRN_ID_CODE']:= TRN_ID_CODE;
                      dm.analyse['an_TOU_ID_NUMERO']:= TOU_ID_NUMERO;
                      dm.analyse['an_TOU_ID_DATE_DEB']:= TOU_ID_DATE_DEB;
                      dm.analyse['an_ECH_DATE_PRELEV']:= ECH_DATE_PRELEV;
                      dm.analyse['an_ECH_DATE_COLLECTE']:= ECH_DATE_COLLECTE;
                      dm.analyse['an_ECH_RANG_PRELEV']:= ECH_RANG_PRELEV;
                      dm.analyse['an_ECH_ORDRE_PRELEV']:= ECH_ORDRE_PRELEV;
                      dm.analyse['an_ENT_ID_CODE_CA']:= ENT_ID_CODE_CA;
                      dm.analyse['an_ENT_ID_CODE_PRD']:= ENT_ID_CODE_PRD;
                      dm.analyse['an_RF_SEC_ID_CODE']:= RF_SEC_ID_CODE;
                      dm.analyse['an_ECH_ANOMALIE']:= ECH_ANOMALIE;
                      dm.analyse['an_ECH_COMMENTAIRE']:= ECH_COMMENTAIRE;
                      dm.analyse.Post;
                   end;
                end;
     
                // <FIN>
                with ChildNodes['FIN'] do
                begin
                   NUMSEQ4 := ChildNodes['NUMSEQ'].Text;
                   NBENR   := StrToInt(ChildNodes['NBENR'].Text);
     
                   labelAction.Caption  := 'Lecture des données...';
                   // c'est là qu'il faut faire le append
                   dm.analyse.first;
                   if not dm.analyse.locate('an_NUMSEQ',NUMSEQ,[]) then
                   begin
                      dm.analyse.Append;
                      dm.analyse['an_NUMSEQ']:= NUMSEQ;
                      dm.analyse['an_NBENR']:= NBENR;
                      dm.analyse.Post;
                   end;
                end;
             end;
          end;
       end;
       Doc.free;
    end;
    Merci d'avance pour votre aide !
    Java c'est pas de la menthe a l'eau
    Et n'oubliez pas : Ne pas respirer tue...
    Mon BLOOOUUUG Un site trop bien

    Pour la recherche JAVA des liens pratiques :
    GOOGLE LA JAVADOC LES FAQ LES ARCHIVES

  10. #30
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Le end de with ChildNodes['DEB'] do est trop bas. Comme écrit, REM, RJM, etc. sont enfants de DEB.

  11. #31
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut
    Oui effectivement... mais je ne sais pas trop ou le mettre
    Java c'est pas de la menthe a l'eau
    Et n'oubliez pas : Ne pas respirer tue...
    Mon BLOOOUUUG Un site trop bien

    Pour la recherche JAVA des liens pratiques :
    GOOGLE LA JAVADOC LES FAQ LES ARCHIVES

  12. #32
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    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
          with ChildNodes['DEB'] do
          begin
             NUMSEQ          := ChildNodes['NUMSEQ'].Text;
             ENT_ID_CODE_LAB := ChildNodes['ENT_ID_CODE_LAB'].Text;
             IDDEST          := ChildNodes['IDDEST'].Text;
             IDFICHIER       := ChildNodes['IDFICHIER'].Text;
             TYPE_EXPORT     := ChildNodes['TYPE_EXPORT'].Text;
             VERSION         := StrToInt(ChildNodes['VERSION'].Text);
     
             labelAction.Caption  := 'Lecture des données...';
             // c'est là qu'il faut faire le append
             dm.analyse.first;
             if not dm.analyse.locate('an_NUMSEQ',NUMSEQ,[]) then
             begin
                dm.analyse.Append;
                dm.analyse['an_NUMSEQ']:= NUMSEQ;
                dm.analyse['an_ENT_ID_CODE_LAB']:= ENT_ID_CODE_LAB;
                dm.analyse['an_IDDEST']:= IDDEST;
                dm.analyse['an_IDFICHIER']:= IDFICHIER;
                dm.analyse['an_TYPE_EXPORT']:= TYPE_EXPORT;
                dm.analyse['an_VERSION']:= VERSION;
                dm.analyse.Post;
             end;
           end;
      
           // <REM>
           with ChildNodes['REM'] do
           begin

  13. #33
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut
    Ok, impecable pour le replacement du "end;" ^^. J'ai un petit soucis fonctionnel avec un format de date mais ça peux s'arranger. En revanche j'ai un problème d'ordre analytique maintenant... Mon fichier XML est fais de la forme 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
    25
    26
    27
    28
     
    <DEB>
     ...
    </DEB>
    <REM>
     ...
       <RJM>
        ....
       </RJM>
       <RJM>
        ...
       </RJM>
    </REM>
    <REM>
      ...
    </REM>
    <REM>
     ...
       <RJM>
         ...
       </RJM>
       <RJM>
         ...
       </RJM>
       <RJM>
         ...
       </RJM>
    </REM>
    Plus clairement, certains <REM> sont des fiches d'identités d'un producteur, (celle qui ne comportent que les balises REM), d'autre sont les produits par producteur... Et le nombre de produits peux varier suivant les producteurs. De plus les "sous-balises" à l'intérieur des différentes balises "<REM>" ne sont pas les mêmes... Bref, je me suis perdu dans mon analyse et je ne sais plus comment faire en delphi pour gérer ce problème... Merci à tous ceux qui voudrons bien se pencher sur mon problème et éclairer ma lanterne...

    Histoire de guider, mon code :

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
     
     
    procedure Tanalyses.FillFromXML(aFileName: TFileName);
    var
     nbtot, I : integer;
     root, node, Ent, Att : IXMLDOMNode;
     REJ_DATE_ANALYSE, REJ_MOIS_FACTURATION, ECH_DATE_COLLECTE, ECH_DATE_PRELEV, TOU_ID_DATE_DEB :tdate;
     VERSION, REM_NOMBRE_RECIDIVE, REM_NOTE_MENSUELLE, REM_NOMBRE_MOIS, REJ_NOTE,
     REJ_UME_VALEUR_RES, TRN_ID_CODE, ECH_ORDRE_PRELEV, ECH_RANG_PRELEV, TOU_ID_NUMERO, NBENR : integer;
     NUMSEQ, NUMSEQ1, NUMSEQ2, NUMSEQ3, NUMSEQ4, ENT_ID_CODE_LAB, IDDEST, IDFICHIER, TYPE_EXPORT,
     ENT_ID_CODE_PRD, REM_MOIS_FACTURATION, RF_CRI_ID_CODE, RF_TRM_ID_CODE, ENT_ID_CODE_CA,
     RF_ESP_ID_CODE, RF_NAT_ID_CODE, RF_AIP_ID_CODE, ENT_ID_CODE_CC, ECH_CODE_LABO,
     RF_MET_ID_CODE, RF_SRJ_ID_CODE, RF_UME_ID_CODE, REM_RECIDIVE, REM_PENALITE_MOIS,
     REM_POUR_PAIEMENT, REM_DIFFUSION_PULL, REM_CLASSE_MENSUELLE, REM_RECLASSEMENT,
     REM_CLASSE_MENSUELLE_PAIE, REJ_PENALISATION_JOUR, REJ_DIFFUSION_PULL,
     ECH_CODE_INTERNE_LABO, RF_SEC_ID_CODE, ECH_ANOMALIE, ECH_COMMENTAIRE : string;
     Doc :TXMLDocument;
     
    begin
       Doc := TXMLDocument.Create(Self);
       Doc.LoadFromFile(aFileName);
     
     
       // <FIC_XML>
       with Doc.DocumentElement do
       begin
    //      nbtot:=root.childNodes.length;
          // <DEB>
          with ChildNodes['DEB'] do
    //      for I := 0 to nbtot - 1 do
          begin
             NUMSEQ          := ChildNodes['NUMSEQ'].Text;
             ENT_ID_CODE_LAB := ChildNodes['ENT_ID_CODE_LAB'].Text;
             IDDEST          := ChildNodes['IDDEST'].Text;
             IDFICHIER       := ChildNodes['IDFICHIER'].Text;
             TYPE_EXPORT     := ChildNodes['TYPE_EXPORT'].Text;
             VERSION         := StrToInt(ChildNodes['VERSION'].Text);
     
             labelAction.Caption  := 'Lecture des données...';
             // c'est là qu'il faut faire le append
             dm.analyse.first;
             if not dm.analyse.locate('an_NUMSEQ',NUMSEQ,[]) then
             begin
                dm.analyse.Append;
                dm.analyse['an_NUMSEQ']:= NUMSEQ;
                dm.analyse['an_ENT_ID_CODE_LAB']:= ENT_ID_CODE_LAB;
                dm.analyse['an_IDDEST']:= IDDEST;
                dm.analyse['an_IDFICHIER']:= IDFICHIER;
                dm.analyse['an_TYPE_EXPORT']:= TYPE_EXPORT;
                dm.analyse['an_VERSION']:= VERSION;
                dm.analyse.Post;
             end;
          end;
     
          // <REM>
          with ChildNodes['REM'] do
          begin
             NUMSEQ1                   := ChildNodes['NUMSEQ'].Text;
             ENT_ID_CODE_PRD           := ChildNodes['ENT_ID_CODE_PRD'].Text;
             REM_MOIS_FACTURATION      := ChildNodes['REM_MOIS_FACTURATION'].Text;
             RF_CRI_ID_CODE            := ChildNodes['RF_CRI_ID_CODE'].Text;
             RF_TRM_ID_CODE            := ChildNodes['RF_TRM_ID_CODE'].Text;
             ENT_ID_CODE_CA            := ChildNodes['ENT_ID_CODE_CA'].Text;
             RF_ESP_ID_CODE            := ChildNodes['RF_ESP_ID_CODE'].Text;
             RF_NAT_ID_CODE            := ChildNodes['RF_NAT_ID_CODE'].Text;
             REM_RECIDIVE              := ChildNodes['REM_RECIDIVE'].Text;
             REM_NOMBRE_RECIDIVE       := StrToInt(ChildNodes['REM_NOMBRE_RECIDIVE'].Text);
             REM_PENALITE_MOIS         := ChildNodes['REM_PENALITE_MOIS'].Text;
             REM_POUR_PAIEMENT         := ChildNodes['REM_POUR_PAIEMENT'].Text;
             REM_DIFFUSION_PULL        := ChildNodes['REM_DIFFUSION_PULL'].Text;
             RF_AIP_ID_CODE            := ChildNodes['RF_AIP_ID_CODE'].Text;
             ENT_ID_CODE_CC            := ChildNodes['ENT_ID_CODE_CC'].Text;
             REM_CLASSE_MENSUELLE      := ChildNodes['REM_CLASSE_MENSUELLE'].Text;
             REM_RECLASSEMENT          := ChildNodes['REM_RECLASSEMENT'].Text;
             REM_CLASSE_MENSUELLE_PAIE := ChildNodes['REM_CLASSE_MENSUELLE_PAIE'].Text;
             REM_NOTE_MENSUELLE        := StrToInt(ChildNodes['REM_NOTE_MENSUELLE'].Text);
             REM_NOMBRE_MOIS           := StrToInt(ChildNodes['REM_NOMBRE_MOIS'].Text);
     
             labelAction.Caption  := 'Lecture des données...';
             // c'est là qu'il faut faire le append
             dm.analyse.first;
             if not dm.analyse.locate('an_NUMSEQ',NUMSEQ,[]) then
             begin
                dm.analyse.Append;
                dm.analyse['an_NUMSEQ']:= NUMSEQ;
                dm.analyse['an_ENT_ID_CODE_PRD']:= ENT_ID_CODE_PRD;
                dm.analyse['an_REM_MOIS_FACTURATION']:= REM_MOIS_FACTURATION;
                dm.analyse['an_REM_NOMBRE_MOIS']:= REM_NOMBRE_MOIS;
                dm.analyse['an_RF_CRI_ID_CODE']:= RF_CRI_ID_CODE;
                dm.analyse['an_RF_TRM_ID_CODE']:= RF_TRM_ID_CODE;
                dm.analyse['an_ENT_ID_CODE_CA']:= ENT_ID_CODE_CA;
                dm.analyse['an_RF_ESP_ID_CODE']:= RF_ESP_ID_CODE;
                dm.analyse['an_RF_NAT_ID_CODE']:= RF_NAT_ID_CODE;
                dm.analyse['an_REM_RECIDIVE']:= REM_RECIDIVE;
                dm.analyse['an_REM_NOMBRE_RECIDIVE']:= REM_NOMBRE_RECIDIVE;
                dm.analyse['an_REM_PENALITE_MOIS']:= REM_PENALITE_MOIS;
                dm.analyse['an_REM_POUR_PAIEMENT']:= REM_POUR_PAIEMENT;
                dm.analyse['an_REM_DIFFUSION_PULL']:= REM_DIFFUSION_PULL;
                dm.analyse['an_REM_CLASSE_MENSUELLE']:= REM_CLASSE_MENSUELLE;
                dm.analyse['an_REM_RECLASSEMENT']:= REM_RECLASSEMENT;
                dm.analyse['an_REM_CLASSE_MENSUELLE_PAIE']:= REM_CLASSE_MENSUELLE_PAIE;
                dm.analyse['an_REM_NOTE_MENSUELLE']:= REM_NOTE_MENSUELLE;
                dm.analyse['an_REM_NOMBRE_MOIS']:= REM_NOMBRE_MOIS;
                dm.analyse.Post;
             end;
     
             // <RJM>
             with ChildNodes['RJM'] do
             begin
                NUMSEQ2               := ChildNodes['NUMSEQ'].Text;
                ECH_CODE_LABO         := ChildNodes['ECH_CODE_LABO'].Text;
                RF_MET_ID_CODE        := ChildNodes['RF_MET_ID_CODE'].Text;
                RF_CRI_ID_CODE        := ChildNodes['RF_CRI_ID_CODE'].Text;
                REJ_DATE_ANALYSE      := StrToDate(FormatDateTime('yyyymmdd',ChildNodes['REJ_DATE_ANALYSE'].Text));
                REJ_MOIS_FACTURATION  := StrToDate(FormatDateTime('yyyymmdd',ChildNodes['REJ_MOIS_FACTURATION'].Text));
                RF_SRJ_ID_CODE        := ChildNodes['RF_SRJ_ID_CODE'].Text;
                REJ_PENALISATION_JOUR := ChildNodes['REJ_PENALISATION_JOUR'].Text;
                REJ_DIFFUSION_PULL    := ChildNodes['REJ_DIFFUSION_PULL'].Text;
                REJ_NOTE              := StrToInt(ChildNodes['REJ_NOTE'].Text);
                REJ_UME_VALEUR_RES    := StrToInt(ChildNodes['REJ_UME_VALEUR_RES'].Text);
                RF_UME_ID_CODE        := ChildNodes['RF_UME_ID_CODE'].Text;
     
                labelAction.Caption  := 'Lecture des données...';
                // c'est là qu'il faut faire le append
                dm.analyse.first;
                if not dm.analyse.locate('an_NUMSEQ',NUMSEQ,[]) then
                begin
                   dm.analyse.Append;
                   dm.analyse['an_NUMSEQ']:= NUMSEQ;
                   dm.analyse['an_ECH_CODE_LABO']:= ECH_CODE_LABO;
                   dm.analyse['an_RF_MET_ID_CODE']:= RF_MET_ID_CODE;
                   dm.analyse['an_RF_CRI_ID_CODE']:= RF_CRI_ID_CODE;
                   dm.analyse['an_REJ_DATE_ANALYSE']:= REJ_DATE_ANALYSE;
                   dm.analyse['an_REJ_MOIS_FACTURATION']:= REJ_MOIS_FACTURATION;
                   dm.analyse['an_RF_SRJ_ID_CODE']:= RF_SRJ_ID_CODE;
                   dm.analyse['an_REJ_PENALISATION_JOUR']:= REJ_PENALISATION_JOUR;
                   dm.analyse['an_REJ_DIFFUSION_PULL']:= REJ_DIFFUSION_PULL;
                   dm.analyse['an_REJ_NOTE']:= REJ_NOTE;
                   dm.analyse['an_REJ_UME_VALEUR_RES']:= REJ_UME_VALEUR_RES;
                   dm.analyse['an_RF_UME_ID_CODE']:= RF_UME_ID_CODE;
                   dm.analyse.Post;
                end;
             end;
          end;
          // <ECM>
          with ChildNodes['ECM'] do
          begin
             NUMSEQ3               := ChildNodes['NUMSEQ'].Text;
             ECH_CODE_LABO         := ChildNodes['ECH_CODE_LABO'].Text;
             ECH_CODE_INTERNE_LABO := ChildNodes['ECH_CODE_INTERNE_LABO'].Text;
             RF_ESP_ID_CODE        := ChildNodes['RF_ESP_ID_CODE'].Text;
             RF_NAT_ID_CODE        := ChildNodes['RF_NAT_ID_CODE'].Text;
             ENT_ID_CODE_CC        := ChildNodes['ENT_ID_CODE_CC'].Text;
             TRN_ID_CODE           := StrToInt(ChildNodes['TRN_ID_CODE'].Text);
             TOU_ID_NUMERO         := StrToInt(ChildNodes['TOU_ID_NUMERO'].Text);
             TOU_ID_DATE_DEB       := StrToDate(FormatDateTime('yyyymmdd',ChildNodes['TOU_ID_DATE_DEB'].Text));
             ECH_DATE_PRELEV       := StrToDate(FormatDateTime('yyyymmdd',ChildNodes['ECH_DATE_PRELEV'].Text));
             ECH_DATE_COLLECTE     := StrToDate(FormatDateTime('yyyymmdd',ChildNodes['ECH_DATE_COLLECTE'].Text));
             ECH_RANG_PRELEV       := StrToInt(ChildNodes['ECH_RANG_PRELEV'].Text);
             ECH_ORDRE_PRELEV      := StrToInt(ChildNodes['ECH_ORDRE_PRELEV'].Text);
             ENT_ID_CODE_CA        := ChildNodes['ENT_ID_CODE_CA'].Text;
             ENT_ID_CODE_PRD       := ChildNodes['ENT_ID_CODE_PRD'].Text;
             RF_SEC_ID_CODE        := ChildNodes['RF_SEC_ID_CODE'].Text;
             ECH_ANOMALIE          := ChildNodes['ECH_ANOMALIE'].Text;
             ECH_COMMENTAIRE       := ChildNodes['ECH_COMMENTAIRE'].Text;
     
             labelAction.Caption  := 'Lecture des données...';
             // c'est là qu'il faut faire le append
             dm.analyse.first;
             if not dm.analyse.locate('an_NUMSEQ',NUMSEQ,[]) then
             begin
                dm.analyse.Append;
                dm.analyse['an_NUMSEQ']:= NUMSEQ;
                dm.analyse['an_ECH_CODE_LABO']:= ECH_CODE_LABO;
                dm.analyse['an_ECH_CODE_INTERNE_LABO']:= ECH_CODE_INTERNE_LABO;
                dm.analyse['an_RF_ESP_ID_CODE']:= RF_ESP_ID_CODE;
                dm.analyse['an_RF_NAT_ID_CODE']:= RF_NAT_ID_CODE;
                dm.analyse['an_ENT_ID_CODE_CC']:= ENT_ID_CODE_CC;
                dm.analyse['an_TRN_ID_CODE']:= TRN_ID_CODE;
                dm.analyse['an_TOU_ID_NUMERO']:= TOU_ID_NUMERO;
                dm.analyse['an_TOU_ID_DATE_DEB']:= TOU_ID_DATE_DEB;
                dm.analyse['an_ECH_DATE_PRELEV']:= ECH_DATE_PRELEV;
                dm.analyse['an_ECH_DATE_COLLECTE']:= ECH_DATE_COLLECTE;
                dm.analyse['an_ECH_RANG_PRELEV']:= ECH_RANG_PRELEV;
                dm.analyse['an_ECH_ORDRE_PRELEV']:= ECH_ORDRE_PRELEV;
                dm.analyse['an_ENT_ID_CODE_CA']:= ENT_ID_CODE_CA;
                dm.analyse['an_ENT_ID_CODE_PRD']:= ENT_ID_CODE_PRD;
                dm.analyse['an_RF_SEC_ID_CODE']:= RF_SEC_ID_CODE;
                dm.analyse['an_ECH_ANOMALIE']:= ECH_ANOMALIE;
                dm.analyse['an_ECH_COMMENTAIRE']:= ECH_COMMENTAIRE;
                dm.analyse.Post;
             end;
          end;
     
          // <FIN>
          with ChildNodes['FIN'] do
          begin
             NUMSEQ4 := ChildNodes['NUMSEQ'].Text;
             NBENR   := StrToInt(ChildNodes['NBENR'].Text);
     
             labelAction.Caption  := 'Lecture des données...';
             // c'est là qu'il faut faire le append
             dm.analyse.first;
             if not dm.analyse.locate('an_NUMSEQ',NUMSEQ,[]) then
             begin
                dm.analyse.Append;
                dm.analyse['an_NUMSEQ']:= NUMSEQ;
                dm.analyse['an_NBENR']:= NBENR;
                dm.analyse.Post;
             end;
          end;
       end;
       Doc.free;
    end;
     
    procedure Tanalyses.Button2Click(Sender: TObject);
    var
     cFile:TFileName;
    begin
       cFile:= chemin.Text;
       FillFromXML(cFile);
    end;
     
    end.
    Java c'est pas de la menthe a l'eau
    Et n'oubliez pas : Ne pas respirer tue...
    Mon BLOOOUUUG Un site trop bien

    Pour la recherche JAVA des liens pratiques :
    GOOGLE LA JAVADOC LES FAQ LES ARCHIVES

  14. #34
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Si tu as plusieurs noeuds de même niveau et de même nom, tu dois les énumérer. Je te renvoi à cette discussion qui contient deux exemples complets.

  15. #35
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut
    Ok, j'ai bien regardé et j'ai essayé de l'appliquer, mais le truc c'est qu'avec tous les niveaux que j'ai je m'y perds... J'ai du mal à savoir ou ouvrir mes boucles et ou les fermées...
    Java c'est pas de la menthe a l'eau
    Et n'oubliez pas : Ne pas respirer tue...
    Mon BLOOOUUUG Un site trop bien

    Pour la recherche JAVA des liens pratiques :
    GOOGLE LA JAVADOC LES FAQ LES ARCHIVES

  16. #36
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut
    J'ai enfin trouver la solution avec l'aide d'un collègue : J'ai créé une table par nœuds, ce qui me facilite grandement la tache... merci à vous tous pour votre aide !
    Java c'est pas de la menthe a l'eau
    Et n'oubliez pas : Ne pas respirer tue...
    Mon BLOOOUUUG Un site trop bien

    Pour la recherche JAVA des liens pratiques :
    GOOGLE LA JAVADOC LES FAQ LES ARCHIVES

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 91
    Points : 54
    Points
    54
    Par défaut
    salut

    j'avais une appli à développer et j'ai utilisé ce
    composant delphi que j'ai trouvé très simple d'utilisation

    http://www.destructor.de/xmlparser/download.htm

  18. #38
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut
    J'ai un nouveaux problème concernant le même sujet, en fait lorsque je veux lire mes nœuds <RJM> je me retrouve à me planter puisque ma boucle n'est pas bonne. Je n'en sort jamais en fait, mais je ne comprends pas pourquoi... je poste mon code pour vous montrer...

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
          // <REM>
          REMnode := ChildNodes['REM'];
          nbrem := REMnode.AttributeNodes.Count;
          with REMnode do
          begin
             while REMnode <> nil do
             begin
                ENT_ID_CODE_PRD           := ChildNodes['ENT_ID_CODE_PRD'].Text;
                REM_MOIS_FACTURATION      := ChildNodes['REM_MOIS_FACTURATION'].Text;
                RF_CRI_ID_CODE            := ChildNodes['RF_CRI_ID_CODE'].Text;
                RF_TRM_ID_CODE            := ChildNodes['RF_TRM_ID_CODE'].Text;
                ENT_ID_CODE_CA            := ChildNodes['ENT_ID_CODE_CA'].Text;
                RF_ESP_ID_CODE            := ChildNodes['RF_ESP_ID_CODE'].Text;
                RF_NAT_ID_CODE            := ChildNodes['RF_NAT_ID_CODE'].Text;
                REM_RECIDIVE              := ChildNodes['REM_RECIDIVE'].Text;
                REM_NOMBRE_RECIDIVE       := StrToInt(ChildNodes['REM_NOMBRE_RECIDIVE'].Text);
                REM_PENALITE_MOIS         := ChildNodes['REM_PENALITE_MOIS'].Text;
                REM_POUR_PAIEMENT         := ChildNodes['REM_POUR_PAIEMENT'].Text;
                REM_DIFFUSION_PULL        := ChildNodes['REM_DIFFUSION_PULL'].Text;
                RF_AIP_ID_CODE            := ChildNodes['RF_AIP_ID_CODE'].Text;
                ENT_ID_CODE_CC            := ChildNodes['ENT_ID_CODE_CC'].Text;
     
                if ChildNodes['REM_CLASSE_MENSUELLE'].Text = '' then
                begin
                  REM_CLASSE_MENSUELLE := ' ';
                end
                else
                begin
                   REM_CLASSE_MENSUELLE := ChildNodes['REM_CLASSE_MENSUELLE'].Text;
                end;
     
                REM_RECLASSEMENT          := ChildNodes['REM_RECLASSEMENT'].Text;
     
                if ChildNodes['REM_CLASSE_MENSUELLE_PAIE'].Text = '' then
                begin
                  REM_CLASSE_MENSUELLE_PAIE := ' ';
                end
                else
                begin
                   REM_CLASSE_MENSUELLE_PAIE := ChildNodes['REM_CLASSE_MENSUELLE_PAIE'].Text;
                end;
     
                REM_NOTE_MENSUELLE        := StrToInt(ChildNodes['REM_NOTE_MENSUELLE'].Text);
     
                if ChildNodes['REM_VALEUR_RES_MENS'].Text = '' then
                begin
                   REM_VALEUR_RES_MENS := 0;
                end
                else
                begin
                   REM_VALEUR_RES_MENS := StrToInt(ChildNodes['REM_VALEUR_RES_MENS'].Text);
                end;
                if ChildNodes['RF_UME_ID_CODE'].Text = '' then
                begin
                  RF_UME_ID_CODE := ' ';
                end
                else
                begin
                   RF_UME_ID_CODE := ChildNodes['RF_UME_ID_CODE'].Text;
                end;
     
                REM_NOMBRE_MOIS           := StrToInt(ChildNodes['REM_NOMBRE_MOIS'].Text);
                labelAction.Caption  := 'Lecture des données...';
                // c'est là qu'il faut faire le append
     
                dm.rem.Append;
                dm.rem['ENT_ID_CODE_PRD']:= ENT_ID_CODE_PRD;
                dm.rem['REM_MOIS_FACTURATION']:= REM_MOIS_FACTURATION;
                dm.rem['REM_NOMBRE_MOIS']:= REM_NOMBRE_MOIS;
                dm.rem['RF_CRI_ID_CODE']:= RF_CRI_ID_CODE;
                dm.rem['RF_TRM_ID_CODE']:= RF_TRM_ID_CODE;
                dm.rem['ENT_ID_CODE_CA']:= ENT_ID_CODE_CA;
                dm.rem['RF_ESP_ID_CODE']:= RF_ESP_ID_CODE;
                dm.rem['RF_NAT_ID_CODE']:= RF_NAT_ID_CODE;
                dm.rem['REM_RECIDIVE']:= REM_RECIDIVE;
                dm.rem['REM_NOMBRE_RECIDIVE']:= REM_NOMBRE_RECIDIVE;
                dm.rem['REM_PENALITE_MOIS']:= REM_PENALITE_MOIS;
                dm.rem['REM_POUR_PAIEMENT']:= REM_POUR_PAIEMENT;
                dm.rem['REM_DIFFUSION_PULL']:= REM_DIFFUSION_PULL;
                dm.rem['REM_CLASSE_MENSUELLE']:= REM_CLASSE_MENSUELLE;
                dm.rem['REM_RECLASSEMENT']:= REM_RECLASSEMENT;
                dm.rem['REM_CLASSE_MENSUELLE_PAIE']:= REM_CLASSE_MENSUELLE_PAIE;
                dm.rem['REM_NOTE_MENSUELLE']:= REM_NOTE_MENSUELLE;
                dm.rem['REM_NOMBRE_MOIS']:= REM_NOMBRE_MOIS;
                dm.rem['RF_UME_ID_CODE']:= RF_UME_ID_CODE;
                dm.rem['REM_VALEUR_RES_MENS']:= REM_VALEUR_RES_MENS;
                dm.rem['REM_NOMFICHIER']:= NOMFICHIER;
                dm.rem.Post;
     
                dm.rem.close;
                dm.rem.open;
                dm.rem.next;
     
                // <RJM>
                RJMnode := ChildNodes['RJM'];
                nbrjm := RJMnode.AttributeNodes.Count;
                with RJMnode do
                begin
                   while RJMnode <> nil do
                   begin
                      ECH_CODE_LABO         := ChildNodes['ECH_CODE_LABO'].Text;
                      RF_MET_ID_CODE        := ChildNodes['RF_MET_ID_CODE'].Text;
                      RF_CRI_ID_CODE        := ChildNodes['RF_CRI_ID_CODE'].Text;
                      REJ_DATE_ANALYSE      := ChildNodes['REJ_DATE_ANALYSE'].Text;
                      REJ_MOIS_FACTURATION  := ChildNodes['REJ_MOIS_FACTURATION'].Text;
                      RF_SRJ_ID_CODE        := ChildNodes['RF_SRJ_ID_CODE'].Text;
                      REJ_PENALISATION_JOUR := ChildNodes['REJ_PENALISATION_JOUR'].Text;
                      REJ_DIFFUSION_PULL    := ChildNodes['REJ_DIFFUSION_PULL'].Text;
                      REJ_NOTE              := ChildNodes['REJ_NOTE'].Text;
                      REJ_UME_VALEUR_RES    := StrToInt(ChildNodes['REJ_UME_VALEUR_RES'].Text);
                      RF_UME_ID_CODE        := ChildNodes['RF_UME_ID_CODE'].Text;
                      RJM_IDREM             := dm.rem['ID_REM'];
     
                      labelAction.Caption  := 'Lecture des données...';
                      // c'est là qu'il faut faire le append
                      dm.rjm.Append;
                      dm.rjm['ECH_CODE_LABO']:= ECH_CODE_LABO;
                      dm.rjm['RF_MET_ID_CODE']:= RF_MET_ID_CODE;
                      dm.rjm['RF_CRI_ID_CODE']:= RF_CRI_ID_CODE;
                      dm.rjm['REJ_DATE_ANALYSE']:= REJ_DATE_ANALYSE;
                      dm.rjm['REJ_MOIS_FACTURATION']:= REJ_MOIS_FACTURATION;
                      dm.rjm['RF_SRJ_ID_CODE']:= RF_SRJ_ID_CODE;
                      dm.rjm['REJ_PENALISATION_JOUR']:= REJ_PENALISATION_JOUR;
                      dm.rjm['REJ_DIFFUSION_PULL']:= REJ_DIFFUSION_PULL;
                      dm.rjm['REJ_NOTE']:= REJ_NOTE;
                      dm.rjm['REJ_UME_VALEUR_RES']:= REJ_UME_VALEUR_RES;
                      dm.rjm['RF_UME_ID_CODE']:= RF_UME_ID_CODE;
                      dm.rjm['RJM_IDREM']:= RJM_IDREM;
                      dm.rjm.Post;
     
                      RJMnode := RJMnode.NextSibling;
                   end;
                end;
                REMnode := REMnode.NextSibling;
             end;
          end;
    En rappel, le nœud <RJM> est un enfant de <REM> et comporte lui même des enfants... En fait le traitement sur RJM il faudrait le faire tant que l'on trouve un nœud RJM et ensuite en sortir, et avec ce code, je pensais avoir trouvé comment faire mais ce n'est pas le cas. En fait je devrai faire deux passages puis sortir (étant donné que je n'ai que deux nœuds <RJM> ), or la je fais un troisième passage ou je récupérer les données ' ' (vide) et donc j'ai une erreur lors de l'écriture dans la base.

    Merci d'avance de votre aide !
    Java c'est pas de la menthe a l'eau
    Et n'oubliez pas : Ne pas respirer tue...
    Mon BLOOOUUUG Un site trop bien

    Pour la recherche JAVA des liens pratiques :
    GOOGLE LA JAVADOC LES FAQ LES ARCHIVES

  19. #39
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    NextSibling te renvoi le prochain noeud de même niveau. S'appelle-t-il 'RJM' ? Mystère. (Il pourrait même s'agir d'un noeud commentaire... )

  20. #40
    Membre habitué Avatar de Spinoza23
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 328
    Points : 166
    Points
    166
    Par défaut
    Oui je sais que nextsibling me renvois le prochain nœud, et une exception si il n'en trouve pas... Dans mon cas, il n'y a pas de nœuds suivant (de même niveau)
    Java c'est pas de la menthe a l'eau
    Et n'oubliez pas : Ne pas respirer tue...
    Mon BLOOOUUUG Un site trop bien

    Pour la recherche JAVA des liens pratiques :
    GOOGLE LA JAVADOC LES FAQ LES ARCHIVES

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [DOM] Demande d'aide pour traiter du xml complexe
    Par cedyy dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/07/2010, 20h10
  2. Problème pour lire du XML
    Par sircus dans le forum SAP
    Réponses: 6
    Dernier message: 08/04/2008, 12h01
  3. Problème pour parser un XML
    Par Aspic dans le forum VB.NET
    Réponses: 3
    Dernier message: 22/01/2008, 20h05
  4. [encoding] Problème pour les fichiers XML avec notepad
    Par lehamster dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/11/2006, 15h56
  5. [XSLT]utiliser une feuille xsl pour traiter différents xml
    Par pistache42 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/05/2006, 18h19

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