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

C Discussion :

parser un fichier xml


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut parser un fichier xml
    Bonsoir,

    Je voulais parser mon fichier XML pouyr extraire certaines informations pour les utiliser dans mon programme C.

    J'ai trouvé la librairie libxml2 qui est codée en C et qui possède deux méthodes DOM et SAX.

    J'ai bien installé libxml2 et j'ai décidé de travailler avec la méthode SAX qui permet de parser des fichiers XML assez grand et n'est pas gourmande en mémoire.

    J'ai trouvé des exemples en général et non simples pour un débutant sur le site officiel de libxml2. Ces exemples sont plus pour la méthode DOM. Je ne trouve pas un exemple pour SAX.

    - Est ce que il y a quelqu'un qui a rencontré ce type de problème ?

    - Pouvez vous me donner un exemple typique pour que j'applique sur mon fichier XML car j'ai besoin des informations qui se trouvent dans le dernier noeud de mon fichier XML ?

    Merci.

  2. #2
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,

    J'ai lu beaucoup des fois les exemples décrites dans le lien .
    http://julp.developpez.com/c/libxml2/?page=sax
    Mais, je n'arrive pas à trouver une solution à mon problème car c'est la première fois que je fais la manipulation de fichier XML dans un programme C en utilisant la méthode SAX de la librairie Iibxml2. De plus, le reste du mon travail se base sur le résultat trouvé dans la solution de ce problème.
    Je veux utiliser une solution proposée par vous comme une fonction pour l'appeler dans mon programme.
    Mon travail consiste à faire deux choses (deux fonctions) :

    - la première fonction permet d'extraire les informations (qui sont des chaines de caractères) qui existent entre la balise <intent> et <\intent> concernant le dernier identificateur <ID> <\ID> du dernière balise <concept> <\concept>

    cette fonction nous donne comme un résultat un tableau ou un fichier contenant :
    "d b c a"

    Dans notre cas ici, on aura une seule ligne du fichier ou bien une seule case du tableau contenant "d b c a"

    - La deuxième fonction permet d'extraire les informations (chaines de caractères) qui existent entre la balise <intent> et <\intent> de tous les identificateurs <ID> <\ID> sauf le dernier identificateur <ID> <\ID>

    et si la balise <intent> <\intent> du premier identificateur <ID> <\ID> n'est pas vide alors nous mettons l'information entre <intent> <\intent> dans le résultat

    Sinon si la balise <intent> <\intent> du premier identificateur <ID> <\ID> est vide comme dans notre cas alors nous ne mettons pas l'information entre <intent> <\intent> dans le résultat.
    cette fonction nous donne comme un résultat un tableau ou un fichier contenant les chaines de caractères recherchées.

    Dans notre cas ici, on aura des lignes du fichier ou bien des cases du tableau contenant:
    "a"
    "b"
    "c"
    "d"
    "a c"
    "b c"
    "b d"
    "c d"
    "a b d"


    Voici mon fichier XML complet nommé "exemple.xml":

    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
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    <Galicia_Document>
    <Lattice numberObj="5" numberAtt="4" numberCpt="11">
     
     
    <Name>lattice(essai)</Name>
    <Object>3</Object>
    <Object>2</Object>
     
    <Object>1</Object>
     
    <Object>5</Object>
    <Object>4</Object>
     
    <Attribute>d</Attribute>
    <Attribute>b</Attribute>
     
    <Attribute>c</Attribute>
     
    <Attribute>a</Attribute>
    <Concept>
    <ID> 1 </ID>
     
    <Extent>
     
    <Object_Ref>3</Object_Ref>
    <Object_Ref>2</Object_Ref>
    <Object_Ref>1</Object_Ref>
     
     
    <Object_Ref>5</Object_Ref>
    <Object_Ref>4</Object_Ref>
    </Extent>
     
    <Intent>
    </Intent>
     
    <UpperCovers>
    </UpperCovers>
    </Concept>
     
    <Concept>
    <ID> 2 </ID>
    <Extent>
     
    <Object_Ref>1</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
    </Extent>
    <Intent>
    <Attribute_Ref>a</Attribute_Ref>
     
     
    </Intent>
    <UpperCovers>
    <Concept_Ref>1</Concept_Ref>
    </UpperCovers>
     
    </Concept>
    <Concept>
     
    <ID> 5 </ID>
    <Extent>
    <Object_Ref>2</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    <Object_Ref>4</Object_Ref>
    </Extent>
     
    <Intent>
    <Attribute_Ref>b</Attribute_Ref>
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>1</Concept_Ref>
    </UpperCovers>
    </Concept>
    <Concept>
     
    <ID> 4 </ID>
     
    <Extent>
    <Object_Ref>3</Object_Ref>
    <Object_Ref>1</Object_Ref>
     
    <Object_Ref>4</Object_Ref>
     
    </Extent>
    <Intent>
    <Attribute_Ref>c</Attribute_Ref>
     
    </Intent>
    <UpperCovers>
    <Concept_Ref>1</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
    <Concept>
    <ID> 3 </ID>
    <Extent>
    <Object_Ref>3</Object_Ref>
     
     
    <Object_Ref>2</Object_Ref>
    <Object_Ref>5</Object_Ref>
    </Extent>
     
    <Intent>
    <Attribute_Ref>d</Attribute_Ref>
     
    </Intent>
    <UpperCovers>
     
    <Concept_Ref>1</Concept_Ref>
    </UpperCovers>
    </Concept>
    <Concept>
     
     
    <ID> 8 </ID>
    <Extent>
    <Object_Ref>1</Object_Ref>
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>c</Attribute_Ref>
    <Attribute_Ref>a</Attribute_Ref>
     
    </Intent>
    <UpperCovers>
    <Concept_Ref>2</Concept_Ref>
     
    <Concept_Ref>4</Concept_Ref>
     
    </UpperCovers>
    </Concept>
    <Concept>
    <ID> 9 </ID>
     
    <Extent>
     
    <Object_Ref>4</Object_Ref>
    </Extent>
    <Intent>
    <Attribute_Ref>b</Attribute_Ref>
     
     
    <Attribute_Ref>c</Attribute_Ref>
    </Intent>
    <UpperCovers>
    <Concept_Ref>5</Concept_Ref>
     
    <Concept_Ref>4</Concept_Ref>
     
    </UpperCovers>
    </Concept>
    <Concept>
     
    <ID> 6 </ID>
    <Extent>
    <Object_Ref>2</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    </Extent>
    <Intent>
    <Attribute_Ref>d</Attribute_Ref>
    <Attribute_Ref>b</Attribute_Ref>
     
     
    </Intent>
    <UpperCovers>
    <Concept_Ref>5</Concept_Ref>
    <Concept_Ref>3</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
    <Concept>
    <ID> 7 </ID>
    <Extent>
     
    <Object_Ref>3</Object_Ref>
     
    </Extent>
    <Intent>
    <Attribute_Ref>d</Attribute_Ref>
     
    <Attribute_Ref>c</Attribute_Ref>
    </Intent>
     
    <UpperCovers>
    <Concept_Ref>4</Concept_Ref>
     
    <Concept_Ref>3</Concept_Ref>
    </UpperCovers>
    </Concept>
     
    <Concept>
     
    <ID> 11 </ID>
    <Extent>
    <Object_Ref>5</Object_Ref>
    </Extent>
     
     
    <Intent>
    <Attribute_Ref>d</Attribute_Ref>
    <Attribute_Ref>b</Attribute_Ref>
     
    <Attribute_Ref>a</Attribute_Ref>
     
    </Intent>
    <UpperCovers>
    <Concept_Ref>2</Concept_Ref>
     
    <Concept_Ref>6</Concept_Ref>
    </UpperCovers>
     
    </Concept>
    <Concept>
     
    <ID> 10 </ID>
    <Extent>
    </Extent>
    <Intent>
    <Attribute_Ref>d</Attribute_Ref>
     
     
    <Attribute_Ref>b</Attribute_Ref>
    <Attribute_Ref>c</Attribute_Ref>
    <Attribute_Ref>a</Attribute_Ref>
     
     
    </Intent>
    <UpperCovers>
    <Concept_Ref>10</Concept_Ref>
    <Concept_Ref>8</Concept_Ref>
     
    <Concept_Ref>9</Concept_Ref>
     
    <Concept_Ref>7</Concept_Ref>
    </UpperCovers>
     
    </Concept>
    </Lattice>
    </Galicia_Document>
    Je serais très reconnaissante si vous m'aidez car j'ai besoin énormément de la solution à mon problème.

    Bon travail et bonne journée.

  3. #3
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Salut,
    je connais pas trop libxml2 mais étant que donné que tu vas faire du SAX, je te conseille expat qui est aussi bien.
    Tu as un exemple ici

    Sinon regarde dans ce thread du forum :
    http://www.developpez.net/forums/d70...parseur-c-sax/

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,

    J'ai bien installé la libraire libxml2 dans mon projet de travail C avec Visual Studio 2008 sous windows. J'ai choisi libxml2 que autre parseur car est adapté mieux pour parser des fichiers xml assez volumineux.
    J'ai décidé de travailler avec la méthode SAX que DOM car SAX est mieux pour mon cas car SAX n'est pas gourmande de mémoire et rapide de plus je m'intéresse au temps d'exécution le moins possible.

    - Pouvez vous m'aider pour trouver une solution pour mon problème décrit au dessus ?

    - C'est possible de me donner la solution à mon problème en utilisant expact pour comprendre mieux le principe et les trucs d'extraire les informations recherchées?

    Merci.

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,

    J'ai lu beaucoup des fois la documentation de libxml2. Mais, je n'arrive pas à trouver une solution à mon problème car c'est la première fois que je fais la manipulation de fichier XML dans un programme C en utilisant la méthode SAX de la librairie Iibxml2. De plus, le reste du mon travail se base sur le résultat trouvé dans la solution de ce problème.
    Je veux utiliser la solution proposée par vous comme une fonction pour l'appeler dans mon programme.
    Mon travail consiste à faire deux choses (deux fonctions) :

    - la première fonction permet d'extraire les informations (qui sont des chaines de caractères) qui existent entre la balise <intent> et <\intent> concernant le dernier identificateur <ID> <\ID> du dernière balise <concept> <\concept>

    cette fonction nous donne comme un résultat un tableau ou un fichier contenant :
    "d b c a"

    Dans notre cas ici, on aura une seule ligne du fichier ou bien une seule case du tableau contenant "d b c a"

    - La deuxième fonction permet d'extraire les informations (chaines de caractères) qui existent entre la balise <intent> et <\intent> de tous les identificateurs <ID> <\ID> sauf le dernier identificateur <ID> <\ID>

    et si la balise <intent> <\intent> du premier identificateur <ID> <\ID> n'est pas vide alors nous mettons l'information entre <intent> <\intent> dans le résultat

    Sinon si la balise <intent> <\intent> du premier identificateur <ID> <\ID> est vide comme dans notre cas alors nous ne mettons pas l'information entre <intent> <\intent> dans le résultat.
    cette fonction nous donne comme un résultat un tableau ou un fichier contenant les chaines de caractères recherchées.

    Dans notre cas ici, on aura des lignes du fichier ou bien des cases du tableau contenant:
    "a"
    "b"
    "c"
    "d"
    "a c"
    "b c"
    "b d"
    "c d"
    "a b d"

    Voici mon fichier XML complet nommé "essai.xml":
    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
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
     
    <Galicia_Document>
    <Lattice numberObj="5" numberAtt="4" numberCpt="11">
    <Name>lattice(essai)</Name>
     
    <Object>3</Object>
    <Object>2</Object>
    <Object>1</Object>
    <Object>5</Object>
    <Object>4</Object>
     
    <Attribute>d</Attribute>
    <Attribute>b</Attribute>
    <Attribute>c</Attribute>
    <Attribute>a</Attribute>
     
    <Concept>
     
    <ID>1 </ID>
     
    <Extent>
     
    <Object_Ref>3</Object_Ref>
     
    <Object_Ref>2</Object_Ref>
     
    <Object_Ref>1</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    <Object_Ref>4</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    </Intent>
     
    <UpperCovers>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 2 </ID>
     
    <Extent>
     
    <Object_Ref>1</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>a</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>1</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 5 </ID>
     
    <Extent>
     
    <Object_Ref>2</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    <Object_Ref>4</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>b</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>1</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 4 </ID>
     
    <Extent>
     
    <Object_Ref>3</Object_Ref>
     
    <Object_Ref>1</Object_Ref>
     
    <Object_Ref>4</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>c</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>1</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 3 </ID>
     
    <Extent>
     
    <Object_Ref>3</Object_Ref>
     
    <Object_Ref>2</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>d</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>1</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 8 </ID>
     
    <Extent>
     
    <Object_Ref>1</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>c</Attribute_Ref>
     
    <Attribute_Ref>a</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>2</Concept_Ref>
     
    <Concept_Ref>4</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 9 </ID>
     
    <Extent>
     
    <Object_Ref>4</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>b</Attribute_Ref>
     
    <Attribute_Ref>c</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>5</Concept_Ref>
     
    <Concept_Ref>4</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 6 </ID>
     
    <Extent>
     
    <Object_Ref>2</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>d</Attribute_Ref>
     
    <Attribute_Ref>b</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>5</Concept_Ref>
     
    <Concept_Ref>3</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 7 </ID>
     
    <Extent>
     
    <Object_Ref>3</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>d</Attribute_Ref>
     
    <Attribute_Ref>c</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>4</Concept_Ref>
     
    <Concept_Ref>3</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 11 </ID>
     
    <Extent>
     
    <Object_Ref>5</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>d</Attribute_Ref>
     
    <Attribute_Ref>b</Attribute_Ref>
     
    <Attribute_Ref>a</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>2</Concept_Ref>
     
    <Concept_Ref>6</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 10 </ID>
     
    <Extent>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>d</Attribute_Ref>
     
    <Attribute_Ref>b</Attribute_Ref>
     
    <Attribute_Ref>c</Attribute_Ref>
     
    <Attribute_Ref>a</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>10</Concept_Ref>
     
    <Concept_Ref>8</Concept_Ref>
     
    <Concept_Ref>9</Concept_Ref>
     
    <Concept_Ref>7</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    </Lattice>
    </Galicia_Document>
    Voici mon code en se basant sur le lien
    http://julp.developpez.com/c/libxml2/?page=sax
    mais ne me répond pas à mon besoin :

    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
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    #include <stdlib.h>
     
    #include <string.h>
     
    #include <libxml/parser.h>
     
     
     
     /* -------------------------------------------- */
     
     
     
    #define MAX 10
     
    #define END -1
     
     
     
    typedef struct {
     
     
     
        int Object_Ref[MAX];
     
        int Attribute_Ref[MAX];
     
        int Concept_Ref[MAX];
     
     
     
    } _Concept;
     
     
     
    typedef struct {
     
     
     
        int id;
     
        _Concept *concept;
     
     
     
    } Concept;
     
     
     
    /* -------------------------------------------- */
     
     
     
    enum ElmtType { ID, OBJ_REF, ATTR_REF, CONCPT_REF, AUTRE };
     
     
     
    enum ElmtType cur_elmt = AUTRE;
     
    _Concept *p_concept;
     
     
     
    void debut_element(void *user_data, const xmlChar *name, const xmlChar **attrs)
     
    {
     
        if (!xmlStrcmp(name, "ID"))
     
            cur_elmt = ID;
     
        else if (!xmlStrcmp(name, "Attribute_Ref"))
     
            cur_elmt = ATTR_REF;
     
        else if (!xmlStrcmp(name, "Concept_Ref"))
     
            cur_elmt = CONCPT_REF;
     
        else if (!xmlStrcmp(name, "Object_Ref"))
     
            cur_elmt = OBJ_REF;
     
        else
     
            cur_elmt = AUTRE;
     
    }
     
     
     
    void caracteres(void *user_data, const xmlChar *ch, int len)
     
    {
     
        Concept *c = user_data;
     
     
     
        if(cur_elmt == ID)
     
        {
     
            int id = strtod(ch,NULL);
     
            int i=0;
     
     
     
            /* est-ce que cet ID nous interesse ? */
     
            while(c[i].id != id && c[i].id != END)
     
                i++;
     
            if(c[i].id == id)
     
            {
     
                /* si oui on alloue une nouvelle structure _Concept pour enregistrer
     
                les infos qui viendront ensuite */
     
                c[i].concept = malloc(sizeof (_Concept));
     
                memset(c[i].concept,END,sizeof(_Concept));
     
                p_concept = c[i].concept;
     
            }
     
            else
     
                p_concept = NULL;
     
        }
     
        else if(cur_elmt == OBJ_REF)
     
        {
     
            if(p_concept != NULL)
     
            {
     
                /* cherche la premiere case de libre */
     
                int *p = p_concept->Object_Ref;
     
                while(*p != END)
     
                    p++;
     
     
     
                *p = strtod(ch,NULL);
     
            }
     
        }
     
        else if(cur_elmt == ATTR_REF)
     
        {
     
            if(p_concept != NULL)
     
            {
     
                int *p = p_concept->Attribute_Ref;
     
                while(*p != END)
     
                    p++;
     
     
     
                *p = ch[0];
     
            }
     
        }
     
        else if(cur_elmt == CONCPT_REF)
     
        {
     
            if(p_concept != NULL)
     
            {
     
                int *p = p_concept->Concept_Ref;
     
                while(*p != END)
     
                    p++;
     
     
     
                *p = strtod(ch,NULL);
     
            }
     
        }
     
    }
     
     
     
    void fin_element(void *user_data, const xmlChar *name)
     
    {
     
        cur_elmt = AUTRE;
     
    }
     
     
     
    Concept* Concept_Load(const char *path, Concept *c)
     
    {
     
        xmlSAXHandler sh = { 0 };
     
     
     
        sh.startElement = debut_element;
     
        sh.characters = caracteres;
     
        sh.endElement = fin_element;
     
     
     
        if (xmlSAXUserParseFile(&sh, c, path) != 0)
     
            return NULL;
     
     
     
        return c;
     
    }
     
     
     
    /* -------------------------------------------- */
     
     
     
    int main(void)
     
    {
     
        int i;
     
     
     
        Concept c[] = { {11,NULL}, {6,NULL}, {78,NULL}, {END,NULL} };
     
     
     
        Concept_Load("f.xml",c);
     
     
     
        for (i=0; c[i].id != END; i++)
     
        {
     
            printf("-- Concept --\n");
     
            printf("ID = %d\n",c[i].id);
     
     
     
            if (c[i].concept != NULL)
     
            {
     
                int j=0;
     
                printf("Object Ref : ");
     
                while (c[i].concept->Object_Ref[j] != END)
     
                    printf("%d ",c[i].concept->Object_Ref[j++]);
     
                printf("\n");
     
     
     
                j=0;
     
                printf("Attribute Ref : ");
     
                while (c[i].concept->Attribute_Ref[j] != END)
     
                    printf("%c ",c[i].concept->Attribute_Ref[j++]);
     
                printf("\n");
     
     
     
                j=0;
     
                printf("Concept Ref : ");
     
                while (c[i].concept->Concept_Ref[j] != END)
     
                    printf("%d ",c[i].concept->Concept_Ref[j++]);
     
                printf("\n\n");
     
            }
     
            else
     
                printf("pas trouve.\n");
     
        }
     
        return 0;
    }
    Mon idée pour la première fonction :
    pour récupérer les infos du dernierr intent...
    on attends l'ouverture

    <Lattice numberObj="5" numberAtt="4" numberCpt="11">

    on mémorise le numberCpt
    et on compte les <intent> que SAX te soumet.

    quand arrive le 11eme, on en extraies les infos.

    Mais, je n'arrive à coder ces étapes:
    - attendre l'ouverture
    - mémorise le numberCpt
    - compte les <intent>
    - extraire les infos
    car je ne sais pas comment je vais faire,...
    car c'est la première fois que je parse un fichier xml.

    Quelles sont les parties qui sont inutiles de code au dessus que ne me répond pas à mon besoin ?

    Pouvez vous proposez un exemple de solution ?


    J'ai besoin de vos aides car je suis bloqué et je n'avance pas.
    Merci.

  6. #6
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Citation Envoyé par vivaviva Voir le message
    Bonjour,
    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
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
     
    <Galicia_Document>
    <Lattice numberObj="5" numberAtt="4" numberCpt="11">
    <Name>lattice(essai)</Name>
     
    <Object>3</Object>
    <Object>2</Object>
    <Object>1</Object>
    <Object>5</Object>
    <Object>4</Object>
     
    <Attribute>d</Attribute>
    <Attribute>b</Attribute>
    <Attribute>c</Attribute>
    <Attribute>a</Attribute>
     
    <Concept>
     
    <ID>1 </ID>
     
    <Extent>
     
    <Object_Ref>3</Object_Ref>
     
    <Object_Ref>2</Object_Ref>
     
    <Object_Ref>1</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    <Object_Ref>4</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    </Intent>
     
    <UpperCovers>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 2 </ID>
     
    <Extent>
     
    <Object_Ref>1</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>a</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>1</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 5 </ID>
     
    <Extent>
     
    <Object_Ref>2</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    <Object_Ref>4</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>b</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>1</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 4 </ID>
     
    <Extent>
     
    <Object_Ref>3</Object_Ref>
     
    <Object_Ref>1</Object_Ref>
     
    <Object_Ref>4</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>c</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>1</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 3 </ID>
     
    <Extent>
     
    <Object_Ref>3</Object_Ref>
     
    <Object_Ref>2</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>d</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>1</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 8 </ID>
     
    <Extent>
     
    <Object_Ref>1</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>c</Attribute_Ref>
     
    <Attribute_Ref>a</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>2</Concept_Ref>
     
    <Concept_Ref>4</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 9 </ID>
     
    <Extent>
     
    <Object_Ref>4</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>b</Attribute_Ref>
     
    <Attribute_Ref>c</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>5</Concept_Ref>
     
    <Concept_Ref>4</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 6 </ID>
     
    <Extent>
     
    <Object_Ref>2</Object_Ref>
     
    <Object_Ref>5</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>d</Attribute_Ref>
     
    <Attribute_Ref>b</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>5</Concept_Ref>
     
    <Concept_Ref>3</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 7 </ID>
     
    <Extent>
     
    <Object_Ref>3</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>d</Attribute_Ref>
     
    <Attribute_Ref>c</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>4</Concept_Ref>
     
    <Concept_Ref>3</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 11 </ID>
     
    <Extent>
     
    <Object_Ref>5</Object_Ref>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>d</Attribute_Ref>
     
    <Attribute_Ref>b</Attribute_Ref>
     
    <Attribute_Ref>a</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>2</Concept_Ref>
     
    <Concept_Ref>6</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    <Concept>
     
    <ID> 10 </ID>
     
    <Extent>
     
    </Extent>
     
    <Intent>
     
    <Attribute_Ref>d</Attribute_Ref>
     
    <Attribute_Ref>b</Attribute_Ref>
     
    <Attribute_Ref>c</Attribute_Ref>
     
    <Attribute_Ref>a</Attribute_Ref>
     
    </Intent>
     
    <UpperCovers>
     
    <Concept_Ref>10</Concept_Ref>
     
    <Concept_Ref>8</Concept_Ref>
     
    <Concept_Ref>9</Concept_Ref>
     
    <Concept_Ref>7</Concept_Ref>
     
    </UpperCovers>
     
    </Concept>
     
    </Lattice>
    </Galicia_Document>
    Voici mon code en se basant sur le lien
    http://julp.developpez.com/c/libxml2/?page=sax
    mais ne me répond pas à mon besoin :


    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
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    #include <stdlib.h>
     
    #include <string.h>
     
    #include <libxml/parser.h>
     
     
     
     /* -------------------------------------------- */
     
     
     
    #define MAX 10
     
    #define END -1
     
     
     
    typedef struct {
     
     
     
        int Object_Ref[MAX];
     
        int Attribute_Ref[MAX];
     
        int Concept_Ref[MAX];
     
     
     
    } _Concept;
     
     
     
    typedef struct {
     
     
     
        int id;
     
        _Concept *concept;
     
     
     
    } Concept;
     
     
     
    /* -------------------------------------------- */
     
     
     
    enum ElmtType { ID, OBJ_REF, ATTR_REF, CONCPT_REF, AUTRE };
     
     
     
    enum ElmtType cur_elmt = AUTRE;
     
    _Concept *p_concept;
     
     
     
    void debut_element(void *user_data, const xmlChar *name, const xmlChar **attrs)
     
    {
     
        if (!xmlStrcmp(name, "ID"))
     
            cur_elmt = ID;
     
        else if (!xmlStrcmp(name, "Attribute_Ref"))
     
            cur_elmt = ATTR_REF;
     
        else if (!xmlStrcmp(name, "Concept_Ref"))
     
            cur_elmt = CONCPT_REF;
     
        else if (!xmlStrcmp(name, "Object_Ref"))
     
            cur_elmt = OBJ_REF;
     
        else
     
            cur_elmt = AUTRE;
     
    }
     
     
     
    void caracteres(void *user_data, const xmlChar *ch, int len)
     
    {
     
        Concept *c = user_data;
     
     
     
        if(cur_elmt == ID)
     
        {
     
            int id = strtod(ch,NULL);
     
            int i=0;
     
     
     
            /* est-ce que cet ID nous interesse ? */
     
            while(c[i].id != id && c[i].id != END)
     
                i++;
     
            if(c[i].id == id)
     
            {
     
                /* si oui on alloue une nouvelle structure _Concept pour enregistrer
     
                les infos qui viendront ensuite */
     
                c[i].concept = malloc(sizeof (_Concept));
     
                memset(c[i].concept,END,sizeof(_Concept));
     
                p_concept = c[i].concept;
     
            }
     
            else
     
                p_concept = NULL;
     
        }
     
        else if(cur_elmt == OBJ_REF)
     
        {
     
            if(p_concept != NULL)
     
            {
     
                /* cherche la premiere case de libre */
     
                int *p = p_concept->Object_Ref;
     
                while(*p != END)
     
                    p++;
     
     
     
                *p = strtod(ch,NULL);
     
            }
     
        }
     
        else if(cur_elmt == ATTR_REF)
     
        {
     
            if(p_concept != NULL)
     
            {
     
                int *p = p_concept->Attribute_Ref;
     
                while(*p != END)
     
                    p++;
     
     
     
                *p = ch[0];
     
            }
     
        }
     
        else if(cur_elmt == CONCPT_REF)
     
        {
     
            if(p_concept != NULL)
     
            {
     
                int *p = p_concept->Concept_Ref;
     
                while(*p != END)
     
                    p++;
     
     
     
                *p = strtod(ch,NULL);
     
            }
     
        }
     
    }
     
     
     
    void fin_element(void *user_data, const xmlChar *name)
     
    {
     
        cur_elmt = AUTRE;
     
    }
     
     
     
    Concept* Concept_Load(const char *path, Concept *c)
     
    {
     
        xmlSAXHandler sh = { 0 };
     
     
     
        sh.startElement = debut_element;
     
        sh.characters = caracteres;
     
        sh.endElement = fin_element;
     
     
     
        if (xmlSAXUserParseFile(&sh, c, path) != 0)
     
            return NULL;
     
     
     
        return c;
     
    }
     
     
     
    /* -------------------------------------------- */
     
     
     
    int main(void)
     
    {
     
        int i;
     
     
     
        Concept c[] = { {11,NULL}, {6,NULL}, {78,NULL}, {END,NULL} };
     
     
     
        Concept_Load("f.xml",c);
     
     
     
        for (i=0; c[i].id != END; i++)
     
        {
     
            printf("-- Concept --\n");
     
            printf("ID = %d\n",c[i].id);
     
     
     
            if (c[i].concept != NULL)
     
            {
     
                int j=0;
     
                printf("Object Ref : ");
     
                while (c[i].concept->Object_Ref[j] != END)
     
                    printf("%d ",c[i].concept->Object_Ref[j++]);
     
                printf("\n");
     
     
     
                j=0;
     
                printf("Attribute Ref : ");
     
                while (c[i].concept->Attribute_Ref[j] != END)
     
                    printf("%c ",c[i].concept->Attribute_Ref[j++]);
     
                printf("\n");
     
     
     
                j=0;
     
                printf("Concept Ref : ");
     
                while (c[i].concept->Concept_Ref[j] != END)
     
                    printf("%d ",c[i].concept->Concept_Ref[j++]);
     
                printf("\n\n");
     
            }
     
            else
     
                printf("pas trouve.\n");
     
        }
     
        return 0;
    }
    Mon idée pour la première fonction :
    pour récupérer les infos du dernierr intent...
    on attends l'ouverture

    <Lattice numberObj="5" numberAtt="4" numberCpt="11">

    on mémorise le numberCpt
    et on compte les <intent> que SAX te soumet.

    quand arrive le 11eme, on en extraies les infos.

    Mais, je n'arrive à coder ces étapes:
    - attendre l'ouverture
    - mémorise le numberCpt
    - compte les <intent>
    - extraire les infos
    car je ne sais pas comment je vais faire,...
    car c'est la première fois que je parse un fichier xml.

    Quelles sont les parties qui sont inutiles de code au dessus que ne me répond pas à mon besoin ?

    Pouvez vous proposez un exemple de solution ?


    J'ai besoin de vos aides car je suis bloqué et je n'avance pas.
    Merci.

    Salut, je te propose en pseudo code une solution à tester et tu me tiens au courant :

    Code C : 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
     
     
    int cpt = 0;
    int nbIntent = 0;
     
    void debut_element(void *user_data, const xmlChar *name, const xmlChar **attrs) {
     
     
      if (!xmlStrcmp(name, "Lattice")) {
            if(attrs != NULL)
                 nbIntent = atoi(attrs[5]);
       }
       if(!xmlStrcmp(name, "Intent"))
          cpt++;
    }
     
     
    void caracteres(void *user_data, const xmlChar *ch, int len) {
      if(cpt == nbIntent)
         printf("Contenu de la balise attributeREf");
     
    }
     
    }

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,

    Je vous remercie pour votre intérêt.

    - Où je vais intégrer votre pseudo code dans mon programme ?
    - J'ajoute quoi et j'enlève quoi du mon programme ?

    Merci.

  8. #8
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Citation Envoyé par vivaviva Voir le message
    Bonjour,

    Je vous remercie pour votre intérêt.

    - Où je vais intégrer votre pseudo code dans mon programme ?
    - J'ajoute quoi et j'enlève quoi du mon programme ?

    Merci.
    Il faut remplacer le code des fonctions debut_element et caractères par le mien et tester si ca marche.

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,

    Voici le nouveau 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
     
     
    #include <stdlib.h>
    #include <string.h>
    #include <libxml/parser.h>
    #pragma comment(lib,"libxml2.lib")
     
     
    #define MAX 10
    #define END -1
     
    typedef struct {
     
        int Object_Ref[MAX];
        int Attribute_Ref[MAX];
        int Concept_Ref[MAX];
     
    } _Concept;
     
    typedef struct {
     
        int id;
        _Concept *concept;
     
    } Concept;
     
     
    enum ElmtType { ID, OBJ_REF, ATTR_REF, CONCPT_REF, AUTRE };
     
    enum ElmtType cur_elmt = AUTRE;
    _Concept *p_concept;
     
    int cpt = 0;
    int nbIntent = 0;
     
    void debut_element(void *user_data, const xmlChar *name, const xmlChar **attrs) {
     
     
      if (!xmlStrcmp(name, "Lattice")) {
            if(attrs != NULL)
                 nbIntent = atoi(attrs[5]);
       }
       if(!xmlStrcmp(name, "Intent"))
          cpt++;
    }
     
    void caracteres(void *user_data, const xmlChar *ch, int len) {
      if(cpt == nbIntent)
         printf("Contenu de la balise attributeREf");
     
    }
     
    void fin_element(void *user_data, const xmlChar *name)
    {
        cur_elmt = AUTRE;
    }
     
    Concept* Concept_Load(const char *path, Concept *c)
    {
        xmlSAXHandler sh = { 0 };
     
        sh.startElement = debut_element;
        sh.characters = caracteres;
        sh.endElement = fin_element;
     
        if (xmlSAXUserParseFile(&sh, c, path) != 0)
            return NULL;
     
        return c;
    }
     
    int main(void)
    {
        int i;
     
        Concept c[] = { {11,NULL}, {6,NULL}, {78,NULL}, {END,NULL} };
     
        Concept_Load("essai.xml",c);
     
        for (i=0; c[i].id != END; i++)
        {
            printf("-- Concept --\n");
            printf("ID = %d\n",c[i].id);
     
            if (c[i].concept != NULL)
            {
                int j=0;
                printf("Object Ref : ");
                while (c[i].concept->Object_Ref[j] != END)
                    printf("%d ",c[i].concept->Object_Ref[j++]);
                printf("\n");
     
                j=0;
                printf("Attribute Ref : ");
                while (c[i].concept->Attribute_Ref[j] != END)
                    printf("%c ",c[i].concept->Attribute_Ref[j++]);
                printf("\n");
     
                j=0;
                printf("Concept Ref : ");
                while (c[i].concept->Concept_Ref[j] != END)
                    printf("%d ",c[i].concept->Concept_Ref[j++]);
                printf("\n\n");
            }
            else
                printf("pas trouve.\n");
        }
     
        return 0;
    }
    voici le résultat de ce code que j'obtiens sur la console après la compilation et l'exécution:
    Contenu de la balise attributeREfContenu de la
    balise attributeREfContenu de la balise attrib
    teREfContenu de la balise attributeREfContenu
    e la balise attributeREfContenu de la balise a
    tributeREfContenu de la balise attributeREfCon
    enu de la balise attributeREfContenu de la bal
    se attributeREfContenu de la balise attributeR
    fContenu de la balise attributeREfContenu de l
    balise attributeREfContenu de la balise attri
    uteREfContenu de la balise attributeREf-- Conc
    ID = 11
    pas trouve.
    -- Concept --
    ID = 6
    pas trouve.
    -- Concept --
    ID = 78
    pas trouve.
    Appuyez sur une touche pour continuer...

  10. #10
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Non mais .....
    Pour la fonction caractères, dans le printf il faut afficher le contenu de la balise AttributeRef. Tu fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    void caracteres(void *user_data, const xmlChar *ch, int len) {
      if(cpt == nbIntent)
      printf("Elément  : (longueur = %d) %.*s\n", len, len, ch);
     
    }
    Affiche le résultat de l'éxécution stp !!

  11. #11
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,

    Il m'affiche ceci:

    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1) d
    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1) b
    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1) c
    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1) a
    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1)

    ElÚment : (longueur = 2) 10
    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1) 8
    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1) 9
    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1) 7
    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1)

    ElÚment : (longueur = 1)

    -- Concept --
    ID = 11
    pas trouve.
    -- Concept --
    ID = 6
    pas trouve.
    -- Concept --
    ID = 78
    pas trouve.
    Appuyez sur une touche pour continuer...

  12. #12
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Déjà un bon début mais procédons à un petit nettoyage.

    Rajoute une troisième variable globale appelée balise et ensuite une nouvelle condition dans la fonction debut_element.

    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
     
    int cpt = 0;
    int nbIntent = 0;
    char *balise;
     
    void debut_element(void *user_data, const xmlChar *name, const xmlChar **attrs) {
     
     
      if (!xmlStrcmp(name, "Lattice")) {
            if(attrs != NULL)
                 nbIntent = atoi(attrs[5]);
       }
       if(!xmlStrcmp(name, "Intent"))
          cpt++;
     
       if(!xmlStrcmp(name,"Attribute_Ref")) {
          balise = (char *) malloc( sizeof(char)*(strlen("Attribute_Ref") + 1));
          strcpy(name,balise);
        }
    }
     
    void caracteres(void *user_data, const xmlChar *ch, int len) {
      if(cpt == nbIntent && (!xmlStrcmp(balise, "Attribute_Ref")))
        printf("%s\n",ch);
     
    }
    Là t'auras un bon affichage

  13. #13
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,
    J'ai fait la modification demandé et j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    -- Concept --
    ID = 11
    pas trouve.
    -- Concept --
    ID = 6
    pas trouve.
    -- Concept --
    ID = 78
    pas trouve.
    Appuyez sur une touche pour continuer...
    Mais, moi je ne cherche pas ceci.

    Le résultat souhaité est les informations (chaines de caractères) existants entre les <intent> </intent> de dernier <id> </id> ces informations seront présentées dans une seule chaine de caractère

    Dans notre cas, nous obtenons la chaine de caractère :
    "d b c a".

    Merci.

  14. #14
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    M****, j'ai fait koi comme betise. .
    Enleve le 2ème test dans la fonction caractère et montre moi l'affichage ??

  15. #15
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    j'ai enlevé le 2 ème test de la fonction debut_element

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(!xmlStrcmp(name, "Intent"))
          cpt++;
    Mais rien ne change pas.
    j'obtiens:

    -- Concept --
    ID = 11
    pas trouve.
    -- Concept --
    ID = 6
    pas trouve.
    -- Concept --
    ID = 78
    pas trouve.
    Qu'est ce que j'enleve de ce programme pour je ne obtiens pas cet affichage:
    -- Concept --
    ID = 11
    pas trouve.
    -- Concept --
    ID = 6
    pas trouve.
    -- Concept --
    ID = 78
    pas trouve.
    Merci.

  16. #16
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Mais tu enlèves le 2ème test de la fonction caracteres pas de debut_element.

  17. #17
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void caracteres(void *user_data, const xmlChar *ch, int len) {
      if(cpt == nbIntent)
        printf("%s\n",ch);
     
    }

  18. #18
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    J'obtiens le contenu de fichier xml !!


    <Lattice numberObj="5" numberAtt="4" numberCpt="11">
    <Name>lattice(essai)</Name>

    <Object>3</Object>
    <Object>2</Object>
    <Object>1</Object>
    <Object>5</Object>
    <Object>4</Object>

    <Attribute>d</Attribute>
    <Attribute>b</Attribute>
    <Attribute>c</Attribute>
    <Attribute>a</Attribute>

    <Concept>

    <ID>1 </ID>

    <Extent>

    <Object_Ref>3</Object_Ref>

    <Object_Ref>2</Object_Ref>

    <Object_Ref>1</Object_Ref>

    <Object_Ref>5</Object_Ref>

    <Object_Ref>4</Object_Ref>

    </Extent>

    <Intent>

    </Intent>

    <UpperCovers>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 2 </ID>

    <Extent>

    <Object_Ref>1</Object_Ref>

    <Object_Ref>5</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>a</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>1</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 5 </ID>

    <Extent>

    <Object_Ref>2</Object_Ref>

    <Object_Ref>5</Object_Ref>

    <Object_Ref>4</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>b</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>1</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 4 </ID>

    <Extent>

    <Object_Ref>3</Object_Ref>

    <Object_Ref>1</Object_Ref>

    <Object_Ref>4</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>c</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>1</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 3 </ID>

    <Extent>

    <Object_Ref>3</Object_Ref>

    <Object_Ref>2</Object_Ref>

    <Object_Ref>5</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>d</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>1</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 8 </ID>

    <Extent>

    <Object_Ref>1</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>c</Attribute_Ref>

    <Attribute_Ref>a</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>2</Concept_Ref>

    <Concept_Ref>4</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 9 </ID>

    <Extent>

    <Object_Ref>4</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>b</Attribute_Ref>

    <Attribute_Ref>c</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>5</Concept_Ref>

    <Concept_Ref>4</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 6 </ID>

    <Extent>

    <Object_Ref>2</Object_Ref>

    <Object_Ref>5</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>d</Attribute_Ref>

    <Attribute_Ref>b</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>5</Concept_Ref>

    <Concept_Ref>3</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 7 </ID>

    <Extent>

    <Object_Ref>3</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>d</Attribute_Ref>

    <Attribute_Ref>c</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>4</Concept_Ref>

    <Concept_Ref>3</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 11 </ID>

    <Extent>

    <Object_Ref>5</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>d</Attribute_Ref>

    <Attribute_Ref>b</Attribute_Ref>

    <Attribute_Ref>a</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>2</Concept_Ref>

    <Concept_Ref>6</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 10 </ID>

    <Extent>

    </Extent>

    <Intent>

    <Attribute_Ref>d</Attribute_Ref>

    <Attribute_Ref>b</Attribute_Ref>

    <Attribute_Ref>c</Attribute_Ref>

    <Attribute_Ref>a</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>10</Concept_Ref>

    <Concept_Ref>8</Concept_Ref>

    <Concept_Ref>9</Concept_Ref>

    <Concept_Ref>7</Concept_Ref>

    </UpperCovers>

    </Concept>

    </Lattice>
    </Galicia_Document>


    -- Concept --
    ID = 11
    pas trouve.
    -- Concept --
    ID = 6
    pas trouve.
    -- Concept --
    ID = 78
    pas trouve.

  19. #19
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Est ce que t'as remis le 2ème test dans la fonction debut_element??
    Sinon, car marchera pas.

  20. #20
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,
    Oui. J'ai fait comme vous me dites.
    Voici le dernier code modifié:
    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
     
    #include <stdlib.h>
    #include <string.h>
    #include <libxml/parser.h>
    #pragma comment(lib,"libxml2.lib")
     
     
    #define MAX 10
    #define END -1 
     
    typedef struct {
     
        int Object_Ref[MAX];
        int Attribute_Ref[MAX];
        int Concept_Ref[MAX];
     
    } _Concept;
     
    typedef struct {
     
        int id;
        _Concept *concept;
     
    } Concept;
     
     
    enum ElmtType { ID, OBJ_REF, ATTR_REF, CONCPT_REF, AUTRE };
     
    enum ElmtType cur_elmt = AUTRE;
    _Concept *p_concept;
     
    int cpt = 0;
    int nbIntent = 0; 
    char *balise; 
     
    void debut_element(void *user_data, const xmlChar *name, const xmlChar **attrs) {
     
     
      if (!xmlStrcmp(name, "Lattice")) {
            if(attrs != NULL)
                 nbIntent = atoi(attrs[5]);
       }
       if(!xmlStrcmp(name, "Intent"))
          cpt++;
     
       if(!xmlStrcmp(name,"Attribute_Ref")) {
          balise = (char *) malloc( sizeof(char)*(strlen("Attribute_Ref") + 1));
          strcpy(name,balise);
        }
    }
     
    void caracteres(void *user_data, const xmlChar *ch, int len) {
      if(cpt == nbIntent)
        printf("%s\n",ch);
     
    } 
     
     
    void fin_element(void *user_data, const xmlChar *name)
    {
        cur_elmt = AUTRE;
    }
     
    Concept* Concept_Load(const char *path, Concept *c)
    {
        xmlSAXHandler sh = { 0 };
     
        sh.startElement = debut_element;
        sh.characters = caracteres;
        sh.endElement = fin_element;
     
        if (xmlSAXUserParseFile(&sh, c, path) != 0)
            return NULL;
     
        return c;
    }
     
    int main(void)
    {
        int i;
     
        Concept c[] = { {11,NULL}, {6,NULL}, {78,NULL}, {END,NULL} };
     
        Concept_Load("essai.xml",c);
     
        for (i=0; c[i].id != END; i++)
        {
            printf("-- Concept --\n");
            printf("ID = %d\n",c[i].id);
     
            if (c[i].concept != NULL)
            {
                int j=0;
                printf("Object Ref : "); 
                while (c[i].concept->Object_Ref[j] != END)
                    printf("%d ",c[i].concept->Object_Ref[j++]);
                printf("\n");
     
                j=0;
                printf("Attribute Ref : ");
                while (c[i].concept->Attribute_Ref[j] != END)
                    printf("%c ",c[i].concept->Attribute_Ref[j++]);
                printf("\n");
     
                j=0;
                printf("Concept Ref : ");
                while (c[i].concept->Concept_Ref[j] != END)
                    printf("%d ",c[i].concept->Concept_Ref[j++]);
                printf("\n\n");
            }
            else
                printf("pas trouve.\n");
        }
     
        return 0;
    }
    Après l'exécution j'obtiens:

    <Lattice numberObj="5" numberAtt="4" numberCpt="11">
    <Name>lattice(essai)</Name>

    <Object>3</Object>
    <Object>2</Object>
    <Object>1</Object>
    <Object>5</Object>
    <Object>4</Object>

    <Attribute>d</Attribute>
    <Attribute>b</Attribute>
    <Attribute>c</Attribute>
    <Attribute>a</Attribute>

    <Concept>

    <ID>1 </ID>

    <Extent>

    <Object_Ref>3</Object_Ref>

    <Object_Ref>2</Object_Ref>

    <Object_Ref>1</Object_Ref>

    <Object_Ref>5</Object_Ref>

    <Object_Ref>4</Object_Ref>

    </Extent>

    <Intent>

    </Intent>

    <UpperCovers>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 2 </ID>

    <Extent>

    <Object_Ref>1</Object_Ref>

    <Object_Ref>5</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>a</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>1</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 5 </ID>

    <Extent>

    <Object_Ref>2</Object_Ref>

    <Object_Ref>5</Object_Ref>

    <Object_Ref>4</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>b</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>1</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 4 </ID>

    <Extent>

    <Object_Ref>3</Object_Ref>

    <Object_Ref>1</Object_Ref>

    <Object_Ref>4</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>c</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>1</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 3 </ID>

    <Extent>

    <Object_Ref>3</Object_Ref>

    <Object_Ref>2</Object_Ref>

    <Object_Ref>5</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>d</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>1</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 8 </ID>

    <Extent>

    <Object_Ref>1</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>c</Attribute_Ref>

    <Attribute_Ref>a</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>2</Concept_Ref>

    <Concept_Ref>4</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 9 </ID>

    <Extent>

    <Object_Ref>4</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>b</Attribute_Ref>

    <Attribute_Ref>c</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>5</Concept_Ref>

    <Concept_Ref>4</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 6 </ID>

    <Extent>

    <Object_Ref>2</Object_Ref>

    <Object_Ref>5</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>d</Attribute_Ref>

    <Attribute_Ref>b</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>5</Concept_Ref>

    <Concept_Ref>3</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 7 </ID>

    <Extent>

    <Object_Ref>3</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>d</Attribute_Ref>

    <Attribute_Ref>c</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>4</Concept_Ref>

    <Concept_Ref>3</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 11 </ID>

    <Extent>

    <Object_Ref>5</Object_Ref>

    </Extent>

    <Intent>

    <Attribute_Ref>d</Attribute_Ref>

    <Attribute_Ref>b</Attribute_Ref>

    <Attribute_Ref>a</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>2</Concept_Ref>

    <Concept_Ref>6</Concept_Ref>

    </UpperCovers>

    </Concept>

    <Concept>

    <ID> 10 </ID>

    <Extent>

    </Extent>

    <Intent>

    <Attribute_Ref>d</Attribute_Ref>

    <Attribute_Ref>b</Attribute_Ref>

    <Attribute_Ref>c</Attribute_Ref>

    <Attribute_Ref>a</Attribute_Ref>

    </Intent>

    <UpperCovers>

    <Concept_Ref>10</Concept_Ref>

    <Concept_Ref>8</Concept_Ref>

    <Concept_Ref>9</Concept_Ref>

    <Concept_Ref>7</Concept_Ref>

    </UpperCovers>

    </Concept>

    </Lattice>
    </Galicia_Document>


    -- Concept --
    ID = 11
    pas trouve.
    -- Concept --
    ID = 6
    pas trouve.
    -- Concept --
    ID = 78
    pas trouve.

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