Accueil > Forum > > > > parser un fichier xml
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
|
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
|
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
|
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
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|