bonjour
je souhaite récupérer le nom d'un élément fils en fonction de son emplacement dans l'arborescence d'un fichier XML en PHP
auriez vous une solution a mon problème ?
bonjour
je souhaite récupérer le nom d'un élément fils en fonction de son emplacement dans l'arborescence d'un fichier XML en PHP
auriez vous une solution a mon problème ?
DomDocument (et éventuellement DOMXPath). Ce sujet pourrait t'intéresser.
mon souci est que je veux récupérer le nom du premier ou du second élément fils
a partir d'une racine d'un dom document
j'ai vraiment besoin d'aide merci
exemple de code xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <racine> <element1> <element2>texte2</element2> </element1> </racine>
je veux recuperer le nom "element2" dans une variable php "$phpe2= ???"
Donnes un exemple du xml à parser et de ce que tu veux récupérer.
Sinon avec DomDocument tu peux utiliser hasChildNodes() et childNodes pour récupérer les noeuds enfants. Il y a un un exemple ici complété avantageusement par un exemple avec xpath dans le message suivant (de stealth35).
EDIT J'ai posté sans avoir vu ta réponse, je regarde ça de plus près.
Quand tu dis le "nom du premier ou du second élément fils" cela veut-il dire que dans ton exemple <element1> pourrait ne pas exister ?
Peut on dire que tu veux le nom de la balise (inclue dans "<racine>") qui possède un noeud texte ? ou simplement le nom de la balise du dernier noeud enfant de <racine> (avec ou sans texte) ?
non cela veut dire que je veux récupérer le nom élément 2 mais ça pourrais être élément 3 sur le même niveau que élément2
J'ai du mal à formaliser ce que tu me dis. Faudrait plus d'exemples des cas possibles.
bonjour, je voudrais extraire un nom de balise d'un fichier XML pour le mettre dans une variable php
par exemple je veux récupérer que le nom de balise "Element_B2"et le mettre dans une variable $php quelconque.
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<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> <Root_Element> <Element_A> <Element_A1>TEXT_A1</Element_A1> <Element_A2>TEXT_A2</Element_A2> <Element_A3>TEXT_A3</Element_A3> <Element_A4>TEXT_A4</Element_A4> </Element_A> <Element_B> <Element_B1>TEXT_B1</Element_B1> <Element_B2>TEXT_B2</Element_B2> <Element_B3>TEXT_B3</Element_B3> <Element_B4>TEXT_B4</Element_B4> </Element_B> </Root_Element>
Oui mais tu ne m'as pas précisé à partir de quoi tu veux faire ta recherche, sur quel critère. Su tu ne peux pas formaliser quelque chose de précis la recherche sera impossible.
Bon en admettant que tu fasses une recherche du nom de la seconde balise contenue dans la balise "Element_B", tu peux faire :
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 <?php $cible = ' <Root_Element> <Element_A> <Element_A1>TEXT_A1</Element_A1> <Element_A2>TEXT_A2</Element_A2> <Element_A3>TEXT_A3</Element_A3> <Element_A4>TEXT_A4</Element_A4> </Element_A> <Element_B> <Element_B1>TEXT_B1</Element_B1> <Element_B2>TEXT_B2</Element_B2> <Element_B3>TEXT_B3</Element_B3> <Element_B4>TEXT_B4</Element_B4> </Element_B> </Root_Element>'; $dom = new DOMDocument; $dom->loadXML($cible); $parent = 'Element_B'; $domliste = $dom->getElementsByTagName($parent); $tab_tag = array(); if ($domliste->length == 1) { $elements = $domliste->item(0)->childNodes; foreach ($elements as $node) { if ($node->nodeType == 1) $tab_tag[] = $node->nodeName; } } else echo 'la balise parente '.$parent.' n\'est pas unique ou n\'existe pas'; echo '<pre>'; print_r($tab_tag); echo '</pre>'; // Le second élément se trouve à l'index n°1 if (isset($tab_tag[1]))echo $tab_tag[1]; ?>
merci de ton aide
mon objectif est de pouvoir a partir d'un fichier xml afficher le premier niveau d'arbrescence sans utiliser le nom de balise dans mon code
je ne veux pas avoir quelquechose du genre $parent = 'Element_B';je veux pouvoir extraire le nom de l'element sans indiquer son nom.
je veux justement recuperer le nom de balise quelqu il soit a partir du load sur un fichier xml (en simplexml ou meme en DOM)
si t'as une solution
je veux que toute mon extraction se fasse automatiquement a partir d'un file.xml sans mettre en dur dans mon code des nom de balises
Pas très précis ;-) Donne un exemple.
A partir de ça :
Tu veux quoi ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <Root_Element> <Element_A> <Element_A1>TEXT_A1</Element_A1> <Element_A2>TEXT_A2</Element_A2> <Element_A3>TEXT_A3</Element_A3> <Element_A4>TEXT_A4</Element_A4> </Element_A> <Element_B> <Element_B1>TEXT_B1</Element_B1> <Element_B2>TEXT_B2</Element_B2> <Element_B3>TEXT_B3</Element_B3> <Element_B4>TEXT_B4</Element_B4> </Element_B> </Root_Element>
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Oui comme je le disais plus haut, pour pouvoir choisir quelque chose il faut bien définir une règle et j'ai toujours pas saisi non plus celle que tu souhaites mettre en oeuvre...
Tant que ne ne pourras pas la définir précisément on ne pourra qu'aller à la pêche
Par exemple si tu ne peux pas rentrer de nom cible, il faudrait alors pouvoir faire une règle sur les positions comme "tous les noeuds enfants des noeuds parents de premiers niveau" ou les "seconds noeuds enfants des noeuds parents de premiers niveau" ou ... etc.
merci pour ce bout de code il m'aide vraiment
mon but est d'obtenir un fichier php qui permet d'extraire les données
d'un fichiers xml en automatique en partant seulement du fichier xml loader dans un $dom et en agissant sur des clicks souris pour afficher un premier niveau d'arborescence puis pour acceder au niveau inferieur agir sur le nom du premier noeud pour develloper l'arborescence inferieur etc... en affichant les valeur des noeuds suivant ainsi que les noms des noeud (entendu que les seconds niveaux peuvent integrer des noeuds et des valeures dans leur arborescence inferieure)
j'espere avoir été assez claire
merci pour votre aide
Heu... ça existe déjà. Tu charges ton xml via php puis tu utilises par exemple "firebug" (de Firefox) et tu cliques sur le menu "html". Cela te conviendrait-il ?
bonjour,
J'ai du mettre tout mon code dans un seul fichier c'est plus simple je le redécouperai ensuite merci de votre compréhension.
Je voudrais savoir si il est possible de faire apparaitre le contenu de la liste déroulante de la div 3 suite a la validation sur le bouton ok2 pour pouvoir la réinjecter dans une autre div.
Et aussi si il est possible de réinjecter le choix sur le menu déroulant de la div3 vers la div2 pour n'avoir qu'un seule fenêtre dynamique.
merci d'avance .
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
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <html> <head> <link rel="stylesheet" type="text/css"> <title>TEST</title> <style type="text/css"> .conteneur1 { background-color:white; } .bloc1 { background-color:Orange; top:20px; left:20px; } .conteneur2 { background-color:white; border:solid 2px; position:absolute; top:70px; left:20px; } .bloc2 { background-color:PaleGreen ; width:1px; top:20px; left:20px; width:400px; } .conteneur3 { background-color:white; border:solid 2px; position:absolute; top:70px; left:520px; } .bloc3 { background-color:Orchid ; width:1px; top:20px; left:20px; width:400px; } </style> </head> <body bgcolor="#333399"> <!-----------------------------------------------------------------------------------------------------> <!-----------------------------------------------------------------------------------------------------> <!------------------------------ CHARGEMENT XML ----------------------------------------------------------> <?php $cible = ' <Organigramme> <Informations> </Informations> <Administration_1> <Informations> </Informations> <Direction_1> <Informations> </Informations> <Utilisateur> <prenom>prenom1</prenom> <nom>nom1</nom> </Utilisateur> <Utilisateur> <prenom>prenom2</prenom> <nom>nom2</nom> </Utilisateur> <Utilisateur> <prenom>prenom3</prenom> <nom>nom3</nom> </Utilisateur> </Direction_1> <Directeur_1> <Informations> </Informations> <Utilisateur> <prenom>prenom4</prenom> <nom>nom4</nom> </Utilisateur> </Directeur_1> <Direction_3> <Informations> </Informations> <Directeurs_1> <Informations> </Informations> <Utilisateur> <prenom>prenom5</prenom> <nom>nom5</nom> </Utilisateur> </Directeurs_1> <Service_1> <Informations> </Informations> <Utilisateur> <prenom>prenom6</prenom> <nom>nom6</nom> </Utilisateur> </Service_1> <Service_2> <Informations> </Informations> <Utilisateur> <prenom>prenom7</prenom> <nom>nom7</nom> </Utilisateur> </Service_2> <Service_3> <Informations> </Informations> <Utilisateur> <prenom>prenom8</prenom> <nom>nom8</nom> </Utilisateur> </Service_3> </Direction_3> <Direction_4> <Informations> </Informations> <Directeurs_1> <Informations> </Informations> <Utilisateur> <prenom>prenom9</prenom> <nom>nom9</nom> </Utilisateur> </Directeurs_1> <Service_1> <Informations> </Informations> <Utilisateur> <prenom>prenom10</prenom> <nom>nom10</nom> </Utilisateur> </Service_1> <Service_2> <Informations> </Informations> <Utilisateur> <prenom>prenom11</prenom> <nom>nom11</nom> </Utilisateur> </Service_2> <Service_3> <Informations> </Informations> <Utilisateur> <prenom>prenom12</prenom> <nom>nom12</nom> </Utilisateur> </Service_3> </Direction_4> <Pole_1> <Informations> </Informations> <DG_1> <Informations> </Informations> <Utilisateur> <prenom>prenom13</prenom> <nom>nom13</nom> </Utilisateur> <Utilisateur> <prenom>prenom14</prenom> <nom>nom14</nom> </Utilisateur> </DG_1> <Services_1> <Informations> </Informations> <Utilisateur> <prenom>prenom15</prenom> <nom>nom15</nom> </Utilisateur> <Utilisateur> <prenom>prenom16</prenom> <nom>nom16</nom> </Utilisateur> </Services_1> </Pole_1> </Administration_1> <Administration_2> <Direction_5> <Service_1> <Informations> </Informations> <Utilisateur> <prenom>prenom17</prenom> <nom>nom17</nom> </Utilisateur> </Service_1> <Service_2> <Informations> </Informations> <Utilisateur> <prenom>prenom18</prenom> <nom>nom18</nom> </Utilisateur> </Service_2> </Direction_5> <Direction_6> </Direction_6> </Administration_2> <Administration_3> <Direction_7> </Direction_7> <Direction_8> <Service_1> <Informations> </Informations> <Utilisateur> <prenom>prenom19</prenom> <nom>nom19</nom> </Utilisateur> </Service_1> <Service_2> <Informations> </Informations> <Utilisateur> <prenom>prenom20</prenom> <nom>nom20</nom> </Utilisateur> </Service_2> </Direction_8> </Administration_3> </Organigramme> '; $dom = new DOMDocument(); $dom->loadXML($cible); //$dom->load("orgab.xml"); $parent=$dom->firstChild->nodeName; ?> <!-----------------------------------------------------------------------------------------------------> <!------------------------------------------------------------------------------------------------------> <!---------------------- DIV 2 ---------------------------------------------------------> <div class="conteneur2"><div class="bloc2"> <?php print("<center><font size=\"3\" face=\"Arial\"><b>$parent</b></font></center></br>"); //<!------------------------------------------------------------------------------------------------->// $domliste = $dom->getElementsByTagName($parent); $tab_tag = array(); $i=0; if ($domliste->length == 1) { $elements = $domliste->item(0)->childNodes; //<!-------------------- Affichage ------------------------------------------------------------------->// foreach ($elements as $node ) { if ($node->nodeType == 1) $tab_tag[] = $node->nodeName; { if( $node->nodeName != "#text" ) { if( $node->nodeName != "Informations" ) { if( $node->nodeName != "membre_de" ) { echo '<center><font size=\"2\" face=\"Arial\">'; echo $node->nodeName; echo "</br>"; echo '</font></center>'; } } $i++; } } }//sortie de boucle //<!---------------- BOUCLE ------------------------------------------------------------------->// $mon_champ3 = isset($_POST['mon_champ3']) ? $_POST['mon_champ3'] : ''; echo '<center><form method="POST"> <select name="mon_champ3">'; foreach ($elements as $node ) { if ($node->nodeType == 1) $tab_tag[] = $node->nodeName; { if( $node->nodeName != "#text" ) { if( $node->nodeName != "Informations" ) { if( $node->nodeName != "membre_de" ) { echo '<option>'; echo utf8_decode($node->nodeName); echo "</br>"; echo'</option>'; } } $i++; } } }//sortie de boucle //<!------------------------------------------------------------------------------------------------->// echo '</select><input type="submit" value="OK1"/></form></center>'; echo "mon_champ3 ==> $mon_champ3"; } else {} ?> </div></div> <!-----------------------------------------------------------------------------------------------------> <!-----------------------------------------------------------------------------------------------------> <!-------------------------- DIV 1 -----------------------------------------------------> <center><div class="conteneur1"><div class="bloc1"> <?php if($parent=="Organigramme") { echo $parent; } else { echo $mon_champ; } ?> </div></div></center> <!-----------------------------------------------------------------------------------------------------> <!-----------------------------------------------------------------------------------------------------> <!------------------------------------------------------------------------------------------------------> <!---------------------- DIV 3 ---------------------------------------------------------> <div class="conteneur3"><div class="bloc3"> <?php print("<center><font size=\"3\" face=\"Arial\"><b>$mon_champ3</b></font></center></br>"); //<!------------------------------------------------------------------------------------------------->// $domliste = $dom->getElementsByTagName($mon_champ3); $tab_tag = array(); $i=0; if ($domliste->length == 1) { $elements = $domliste->item(0)->childNodes; //<!-------------------- Affichage ------------------------------------------------------------------->// foreach ($elements as $node ) { if ($node->nodeType == 1) $tab_tag[] = $node->nodeName; { if( $node->nodeName != "#text" ) { if( $node->nodeName != "Informations" ) { if( $node->nodeName != "membre_de" ) { echo '<center><font size=\"2\" face=\"Arial\">'; echo $node->nodeName; echo "</br>"; echo '</font></center>'; } } $i++; } } }//sortie de boucle //<!---------------- BOUCLE ------------------------------------------------------------------->// $mon_champ4 = isset($_POST['mon_champ4']) ? $_POST['mon_champ4'] : ''; echo '<center><form method="POST"> <select name="mon_champ4">'; foreach ($elements as $node ) { if ($node->nodeType == 1) $tab_tag[] = $node->nodeName; { if( $node->nodeName != "#text" ) { if( $node->nodeName != "Informations" ) { if( $node->nodeName != "membre_de" ) { echo '<option>'; echo utf8_decode($node->nodeName); echo "</br>"; echo'</option>'; } } $i++; } } }//sortie de boucle //<!------------------------------------------------------------------------------------------------->// echo '</select><input type="submit" value="OK2"/></form></center>'; echo "mon_champ4 ==> $mon_champ4"; } else {} ?> </div></div> </body> </html>
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager