Parser un fichier xml

boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 - 18 août 2009 à 21:46
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 - 24 nov. 2009 à 22:51
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.

208 réponses

boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
19 août 2009 à 11:06
Bonjour,

En réalité, je voudrais lire des informations à partir d'un fichier XML pour les utiliser après dans mon programme C. Ce fichier XML est assez volumineux. Ce fichier a une structure bien définie.
En général voici la structure de ce fichier:
On trouve :
- le type de document
- le nombre d'objets, le nombre d'attributs et le nombre des concepts
- le nom de lattice
- la liste des objets
- le liste des attributs
- la liste des concepts

Je m'intéresse à liste des concepts dans mon programme C.

Voici en général la structure de ce fichier "nom.lat.xml"
<Galicia_Document>
<Lattice numberObj= "5" numberAtt="4" numberCpt= "11">
<Name>lattice(essai)</Name>
<Object>3</Object>
.....
<Object>4</Object>
b
........
a
<Concept>
1
<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>




........
.........
.......
11
<Extent>
</Extent>

d
b
c
a


<Concept_Ref>10</Concept_Ref>
<Concept_Ref>8</Concept_Ref>
<Concept_Ref>9</Concept_Ref>
<Concept_Ref>7</Concept_Ref>


</Concept>

Comment je vais positionner sur le dernier identifiant 11
pour extraire toutes les valeurs de balise qui existent entre les deux balises ?


d
b
c
a


Ces valeurs d, b, c et a je vais les utiliser dans mon programme C.
Aussi de même, je veux lire les valeurs 10, 8, 9 et 7 entre les deux balises <Concept_Ref>
</Concept_Ref> qui existent sous les balises


<Concept_Ref>10</Concept_Ref>
<Concept_Ref>8</Concept_Ref>
<Concept_Ref>9</Concept_Ref>
<Concept_Ref>7</Concept_Ref>


Voici mon fichier XML complet nommé "essai.lat.xml":
  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



<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>
d
b
c
a
<Concept>
 1 
<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>




</Concept>
<Concept>
 2 
<Extent>
<Object_Ref>1</Object_Ref>
<Object_Ref>5</Object_Ref>
</Extent>

a


<Concept_Ref>1</Concept_Ref>

</Concept>
<Concept>
 5 
<Extent>
<Object_Ref>2</Object_Ref>
<Object_Ref>5</Object_Ref>
<Object_Ref>4</Object_Ref>
</Extent>

b


<Concept_Ref>1</Concept_Ref>

</Concept>
<Concept>
 4 
<Extent>
<Object_Ref>3</Object_Ref>
<Object_Ref>1</Object_Ref>
<Object_Ref>4</Object_Ref>
</Extent>

c


<Concept_Ref>1</Concept_Ref>

</Concept>
<Concept>
 3 
<Extent>
<Object_Ref>3</Object_Ref>
<Object_Ref>2</Object_Ref>
<Object_Ref>5</Object_Ref>
</Extent>

d


<Concept_Ref>1</Concept_Ref>

</Concept>
<Concept>
 8 
<Extent>
<Object_Ref>1</Object_Ref>
</Extent>

c
a


<Concept_Ref>2</Concept_Ref>
<Concept_Ref>4</Concept_Ref>

</Concept>
<Concept>
 9 
<Extent>
<Object_Ref>4</Object_Ref>
</Extent>

b
c


<Concept_Ref>5</Concept_Ref>
<Concept_Ref>4</Concept_Ref>

</Concept>
<Concept>
 6 
<Extent>
<Object_Ref>2</Object_Ref>
<Object_Ref>5</Object_Ref>
</Extent>

d
b


<Concept_Ref>5</Concept_Ref>
<Concept_Ref>3</Concept_Ref>

</Concept>
<Concept>
 7 
<Extent>
<Object_Ref>3</Object_Ref>
</Extent>

d
c


<Concept_Ref>4</Concept_Ref>
<Concept_Ref>3</Concept_Ref>

</Concept>
<Concept>
 10 
<Extent>
<Object_Ref>5</Object_Ref>
</Extent>

d
b
a


<Concept_Ref>2</Concept_Ref>
<Concept_Ref>6</Concept_Ref>

</Concept>
<Concept>
 11 
<Extent>
</Extent>

d
b
c
a


<Concept_Ref>10</Concept_Ref>
<Concept_Ref>8</Concept_Ref>
<Concept_Ref>9</Concept_Ref>
<Concept_Ref>7</Concept_Ref>

</Concept>
</Lattice>
</Galicia_Document>


Vue que la première fois que je parse un fichier XML alors je ne
comprends pas le principe de le faire. par exemple dans la
manipulation de fichier texte. Il faut:
- tester l'existence du fichier
- ouvrir le fichier
- lire le fichier
- traitement
- fermeture.

Par analogie comment je vais lire les informations existant dans la
dernière balise de mon fichier XML ?

Je m'intéresse au cette partie (dernière balise "concep") du mon
fichier :
<Concept>
 11 
<Extent>
</Extent>

d
b
c
a


<Concept_Ref>10</Concept_Ref>
<Concept_Ref>8</Concept_Ref>
<Concept_Ref>9</Concept_Ref>
<Concept_Ref>7</Concept_Ref>

</Concept>


Je voudrais stocker les valeurs qui existent entre les sous balises
pour les utiliser dans mon programme C.

- <Extent> </Extent>
-
-

Comment je vais extraire ces valeurs ?

C'est urgent. Aidez-moi je suis bloqué.

Merci.
0
Rejoignez-nous