begin process at 2012 05 29 14:42:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

parser un fichier xml


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

parser un fichier xml

mardi 18 août 2009 à 21:46:29 | parser un fichier xml

boualiasma

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.

mercredi 19 août 2009 à 11:06:12 | Re : parser un fichier xml

boualiasma

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>
<Attribute>b</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>
........
.........
.......
<ID> 11 </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>

Comment je vais positionner sur le dernier identifiant <ID> 11 </ID>
pour extraire toutes les valeurs de balise <Attribute_Ref> </Attribute_Ref> qui existent entre les deux balises <Intent> </Intent> ?

<Intent>
<Attribute_Ref>d</Attribute_Ref>
<Attribute_Ref>b</Attribute_Ref>
<Attribute_Ref>c</Attribute_Ref>
<Attribute_Ref>a</Attribute_Ref>
</Intent>

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 <UpperCovers> </UpperCovers>

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

Voici mon fichier XML complet nommé "essai.lat.xml":

Code 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>
<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> 10 </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> 11 </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>


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 :
Code XML :

<Concept>
<ID> 11 </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>


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

- <Extent> </Extent>
- <Attribute_Ref> </Attribute_Ref>
- <UpperCovers> </UpperCovers>

Comment je vais extraire ces valeurs ?

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

Merci.

mercredi 19 août 2009 à 11:08:28 | Re : parser un fichier xml

boualiasma

Voici mon fichier XML complet nommé "essai.lat.xml":

Code XML :

<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> 10 </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> 11 </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>

mercredi 19 août 2009 à 11:52:13 | Re : parser un fichier xml

boualiasma

Bonjour,

- C'est quoi la différence entre l'utilisation du méthode DOM, SAX et XPath ?
- Quelle est la méthode la plus adaptée pour la manipulation pour traiter des fichiers XML assez volumineux et le moins consommation en mémoire ?

A mon avis C'est SAX.

Pouvez me donner un exemple de méthode SAX qui me répond à mon besoin ?

Merci.

mercredi 19 août 2009 à 14:12:56 | Re : parser un fichier xml

Renfield

Administrateur CodeS-SourceS


fais toi plaisir

[ Lien ]

Renfield - Admin CodeS-SourceS - MVP Visual Basic

mercredi 19 août 2009 à 16:00:39 | Re : parser un fichier xml

boualiasma

Bonjour,

Ce lien concerne DOM et SAX pour le Java.
Moi, je cherche la méthode SAX coté la librairie Libxml2.

Merci.

mercredi 19 août 2009 à 16:07:11 | Re : parser un fichier xml

Renfield

Administrateur CodeS-SourceS


Ca ne change rien... SAX c'est SAX...

ca dit que SAX va lire ton flux XML et appeler des fonctions pour tel ou tel type d'info récupérée

DOM me semble donc bien plus adapté a ton cas...
il stocke sous forme d'arborescence le floux XML en mémoire et te permet de récupérer efficacement tes données, via une bête requete.

Renfield - Admin CodeS-SourceS - MVP Visual Basic

mercredi 19 août 2009 à 20:57:05 | Re : parser un fichier xml

boualiasma

Bonjour,

La méthode SAX est mieux que DOM concernant la manipulation des fichiers XML assez volumineux de plus elle consomme le moins de mémoire.

De plus votre exemple est en java et non pas en C.

mercredi 19 août 2009 à 21:09:12 | Re : parser un fichier xml

Renfield

Administrateur CodeS-SourceS

peu importe le langage, la libxml2 reste la même...

google est ton ami...
si depuis ce matin tu attend (quoi ?) de taper :

libxml2 sax sample

dans google, j'avoue ignorer pourquoi...

ca donne de bons résultats rapidement:

http://www.jamesh.id.au/articles/libxml-sax/libxml-sax.html


Renfield - Admin CodeS-SourceS - MVP Visual Basic

mardi 25 août 2009 à 00:50:31 | Re : parser un fichier xml

boualiasma

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 XML :

<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 C/C++ :

#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;
}



Je serais très reconnaissant si vous m'aidez car j'ai besoin énormément de la solution à mon problème.

Merci.



Cette discussion est classée dans : fichier, xml, sax, parser, libxml2


Répondre à ce message

Sujets en rapport avec ce message

Besoin d'aide pour la réalisation d'un parser xml avec VC++6 [ par petiot_cedric2 ] Mon but est de créer une application avec VC++6 avec une interface graphique en C++ pour ouvrir un fichier XML, le parser et le réécrire dans un nouve modifier avec SAX [ par tudiant ] Bonjour tlm. Je besoin de lire et modifier avec C++ un fichier xml sans changer la structure du fichier, je veut pas utiliser DOM à cause de la mémoir Parser avec description de format (xml) ? [ par RV2931 ] Bonjour,Je dois réaliser quelques parsers de fichiers, notament un parser de fichiers DXF, et d'autres formats propriétaires...J'ai entendu parler que Syntaxe fichier XML [ par Rom1S ] Salut,Je suis novice en programmation, mon but dans un premier temps est d'établir une liste de fichiers  XML, pour ensuite les parser (grâce à Xerces ouvrir fichier xml [ par noura5101 ] bjrcomment faire pour ouvrir un fichier xml dans builder c++  ? Se deplacer dans un fichier xml [ par romaingic ] Bonjour, J'aimerais savoir si quelqu'un saurait comment faire pour se déplacer dans un fichier xml, dans le but de relever une valeur spécifique dans valider xml avec xsd en C + + [ par khaliloenit ] Bonjour, Je voudrais savoir s'il vous plaît comment je peux valider un fichier xml (entrée de mon code) par rapport au fichier xsd (Validation avec n Installation et utilisation de Libxml2 sous windows [ par boualiasma ] Salut,Je suis entrain de programmer en C avec Visual studio 2008 sous Windows.Je voudrais parser un fichier XML dans mon programme C. J'ai trouvé libx convertir un fichier texte en fichier XML. [ par boualiasma ] Salut à tous !Je suis en train d'essayer de convertir un fichier texte en xml.Ce fichier texte est structuré, et j'ai donc un identifiant en début de parser un fichier xml avec tinyxml [ par rabebs ] Bonjour tout le monde Je cherche à récupérer des valeurs des balises se trouvant sous d'autres balises comme:<pre class="alt2" dir="ltr" style="border


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales