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

WinDev Discussion :

Parser un fichier XML [WD20]


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 133
    Points : 38
    Points
    38
    Par défaut Parser un fichier XML
    Bonjour,
    Je cherches a parser le document xml suivant :
    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
    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
    <?xml version="1.0" encoding="Windows-1252"?>
    <Transmission>
      <Id>{ac495ef5-0000e454-0000476e-0294f798}</Id>
      <Format>Integrator 1.3</Format>
      <Sender>
        <Id>1</Id>
        <Name>Combi </Name>
        <User>Default Manager</User>
      </Sender>
      <Job>
        <Id>000000010000007c</Id>
        <Name>Normal (3)</Name>
        <Type>NORMAL</Type>
        <Samples>2</Samples>
        <TestDate>26/05/2016</TestDate>
        <InfoList>
          <Info Type="CollectionDate">26/05/2016</Info>
          <Info Type="Sampling">MANUAL</Info>
        </InfoList>
        <UserDefinedFieldList>
        </UserDefinedFieldList>
        <MeasureProgram>
          <Name>Contrôle</Name>
          <ComponentList>
            <Component Id="020-001-000-000">
              <Name>INFORMATION</Name>
              <Unit>Result Info</Unit>
            </Component>
            <Component Id="015-001-000-000">
              <Name>N° SESSION</Name>
              <Unit>Counter</Unit>
            </Component>
            <Component Id="017-001-000-000">
              <Name>N° LOT</Name>
              <Unit>Counter</Unit>
            </Component>
            <Component Id="030-006-000-000">
              <Name>MG</Name>
              <Unit>%</Unit>
            </Component>
            <Component Id="031-003-000-000">
              <Name>MP</Name>
              <Unit>%</Unit>
            </Component>
            <Component Id="034-003-000-000">
              <Name>LACT</Name>
              <Unit>%</Unit>
            </Component>
            <Component Id="039-002-000-000">
              <Name>FPD</Name>
              <Unit>mC</Unit>
            </Component>
            <Component Id="090-002-000-000">
              <Name>Cellules</Name>
              <Unit>1000/ml</Unit>
            </Component>
            <Component Id="020-004-000-000">
              <Name>DATE</Name>
              <Unit>Date</Unit>
            </Component>
            <Component Id="020-003-000-000">
              <Name>HEURE</Name>
              <Unit>Time</Unit>
            </Component>
          </ComponentList>
        </MeasureProgram>
      </Job>
      <ResultList>
        <JobId>000000010000007c</JobId>
        <JobName>Normal (3)</JobName>
        <Result>
          <Type>NORMAL</Type>
          <SubType>VALUE</SubType>
          <Date>26/05/2016</Date>
          <Time>15:34:16</Time>
          <Id>000000f400010001</Id>
          <UserDefinedFieldList>
          </UserDefinedFieldList>
          <ComponentList>
            <Component Id="017-001-000-000">
              <Value>1</Value>
            </Component>
            <Component Id="030-006-000-000">
              <Value>0.28</Value>
            </Component>
            <Component Id="031-003-000-000">
              <Value>0.48</Value>
            </Component>
            <Component Id="034-003-000-000">
              <Value>-0.17</Value>
            </Component>
            <Component Id="039-002-000-000">
              <Value>-97</Value>
            </Component>
            <Component Id="090-002-000-000">
              <Value>1</Value>
            </Component>
            <Component Id="020-004-000-000" ValueType="text">
              <Value>26/05/2016</Value>
            </Component>
            <Component Id="020-003-000-000" ValueType="text">
              <Value>15:34:16</Value>
            </Component>
          </ComponentList>
        </Result>
        <Result>
          <Type>NORMAL</Type>
          <SubType>VALUE</SubType>
          <Date>26/05/2016</Date>
          <Time>15:34:21</Time>
          <Id>000000f500010001</Id>
          <UserDefinedFieldList>
          </UserDefinedFieldList>
          <ComponentList>
            <Component Id="017-001-000-000">
              <Value>2</Value>
            </Component>
            <Component Id="030-006-000-000">
              <Value>0.28</Value>
            </Component>
            <Component Id="031-003-000-000">
              <Value>0.49</Value>
            </Component>
            <Component Id="034-003-000-000">
              <Value>-0.19</Value>
            </Component>
            <Component Id="039-002-000-000">
              <Value>-97</Value>
            </Component>
            <Component Id="090-002-000-000">
              <Value>0</Value>
            </Component>
            <Component Id="020-004-000-000" ValueType="text">
              <Value>26/05/2016</Value>
            </Component>
            <Component Id="020-003-000-000" ValueType="text">
              <Value>15:34:21</Value>
            </Component>
          </ComponentList>
        </Result>
      </ResultList>
    </Transmission>
    je veux mettre le contenu dans un champ table sachant que les informations que je vais extraire commence a partir de la balise
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <Component Id="017-001-000-000">
              <Name>N° LOT</Name>
              <Unit>Counter</Unit>
            </Component>
    j'ai procédés comme suit :
    je cherche la balise component et je remplis un tableau associatif de chaine qui a comme indice id_name et comme valeur la valeur de l'id (tableau[id_N° LOT] = "017-001-000-000") pour chercher ensuite les valeurs des id dans la balise resultlist
    pour remplir le tableau je mets le code suivant:
    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
    //Recherche des ids des noms de colonne
    				XMLRecherche("DocXML","Component",XMLBalise,XMLExact)
                                    //Pointaer la troisième ligne
    				XMLSuivant("DocXML")
    				XMLSuivant("DocXML")
    				taBleau_id_criters est un tableau associatif de chaînes ANSI
    				TANTQUE XMLTrouve("DocXML")
    					XMLFils("DocXML")
    					taBleau_id_criters[XMLNomElément("DocXML")+"_Lot"] = XMLDonnée("DocXML")
    					XMLParent("DocXML")
    					XMLSuivant("DocXML")
    				FIN
    				POUR TOUT ELEMENT sindice,scontenu DE taBleau_id_criters
    					Trace(ChaîneConstruit("%1 : %2", sindice, scontenu))
    				FIN
    le problème est lorsque je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    XMLRecherche("DocXML","Component",XMLBalise,XMLExact)
    				XMLSuivant("DocXML")
    				XMLSuivant("DocXML")
    trace("Balise trouvée " + XMLNomElément("DocXML")+" : "+  XMLDonnée("DocXML"))
    ça donne le troisième élément mais lorsque je mets la boucle il pointe le dernier élément.
    merci pour vos aides

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Je ne vais ps vous fournir de solution avec les fonctions xml, que je n'utilise pas.

    J'attire votre attention sur les variables de type xmlDocument, xmlNoeud, xmlAttribut etc qui sont la solution que préconise PCsoft.

    Outre la possibilité de valider les fichiers xml avec un xsd (ou un autre xml), cela revient à travailler avec des propriétés, des tableaux et les instructions classiques des tableaux, y compris les parcours.
    Simple et efficace.
    Attention à ne pas confondre la variablexmlDocument que je vous conseille ci-dessus et la fonction xmlDocument() !

    Bon travail

    Hemgé

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 133
    Points : 38
    Points
    38
    Par défaut
    Merci pour l'information

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 952
    Points : 9 281
    Points
    9 281
    Par défaut
    hello,
    comme je l'indiquait dans cette discussion on peut (souvent) utiliser un fichier de description xml pour balayer un fichier xml surtout si celui-ci présente une structure qui ne change pas (toujours les mêmes balises). Comme fichier de description on peut utiliser le fichier xml lui-même ce qui a l'air de fonctionner pour ton fichier xml. Donc :
    1 - Importer le fichier xml (ou un fichier similaire) dans l'explorateur de projet de windev (cliquer droit sur Description XML puis choisir importer un fichier de description xml .
    et voici alors un exemple de code qui permet de balayer tous les composants de l'arborescence Transmission.Job.MeasureProgram.ComponentList dans ton fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // J.P Juillet 2016
    MesComposants est un WL.XMLDocument, description =testxml
    // Chargement d'un document XML depuis un fichier
    MesComposants = XMLOuvre("f:\temp\testxml.xml",depuisFichier)
    Trace("Job.MeasureProgram.ComponentList ")
    POUR TOUT composant DE MesComposants.Transmission.Job.MeasureProgram.ComponentList 
    	Trace("Composant   ID : ", composant:Id," - Nom : ",composant.Name," - Unité : ",composant.Unit)
    Trace("==================================")
    FIN
    et voici le résultat :

    Nom : Balayage-Fichier xml.png
Affichages : 1376
Taille : 55,7 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

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

Discussions similaires

  1. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32
  2. [xslt] Parser 2 fichiers XML
    Par malekms dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/12/2005, 12h22
  3. Parser un fichier XML
    Par Charlinecha dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 11/07/2005, 17h18
  4. [SAX] parser un fichier xml en Java
    Par royou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/02/2005, 17h12
  5. parser des fichier .xml en perl
    Par djibril dans le forum Modules
    Réponses: 13
    Dernier message: 18/05/2004, 17h08

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