Bonjour,
Je dois lire un fichier XML, j'ai utilisé les fonctions suivantes.
Mon problème est que je maitrise pas le langage objet et que la présence des différentes imbrication de type stdClass Object.
Je me retrouve avec 2 erreurs :
- Invalid argument supplied for foreach() in D:\Sites\Portail-ADM\test_xml.php
- Object of class stdClass could not be converted to string
Si quelqu'un peut m'aider, un grand merci par avance.
Mon but est de récupérer les clefs et les valeurs dans un tableau simple dans le but de les insérer en base de données.
Les données
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 function fileToObject($fileName) { // création du nouvel objet document $dom = new DomDocument(); // chargement à partir du fichier $dom->load($fileName); // validation à partir de la DTD référencée dans le document. // En cas d'erreur, on ne va pas plus loin /* if (!@$dom->validate()) { return false; }*/ // création de l'objet résultat $object = new stdClass(); // on référence l'adresse du fichier source $object->source = $fileName; // on récupère l'élément racine, on le met dans un membre // de l'objet nommé "root" $root = $dom->documentElement; $object->root = new stdClass(); // appel d'une fonction récursive qui traduit l'élément XML // et passe la main à ses enfants, en parcourant tout l'arbre XML. getElement($root, $object->root); return $object; } function getElement($dom_element, $object_element) { //$indice = 0; // récupération du nom de l'élément $object_element->name = $dom_element->nodeName; // récupération de la valeur CDATA, // en supprimant les espaces de formatage. $object_element->textValue = trim($dom_element->firstChild->nodeValue); // Récupération des attributs if ($dom_element->hasAttributes()) { $object_element->attributes = array(); foreach($dom_element->attributes as $attName=>$dom_attribute) { $object_element->attributes[$attName] = $dom_attribute->value; } } // Récupération des éléments fils, et parcours de l'arbre XML // on veut length >1 parce que le premier fils est toujours // le noeud texte if ($dom_element->childNodes->length > 1) { $object_element->children = array(); foreach($dom_element->childNodes as $dom_child) { if ($dom_child->nodeType == XML_ELEMENT_NODE) { $child_object = new stdClass(); getElement($dom_child, $child_object); array_push($object_element->children, $child_object); } } } } $tab_fic = fileToObject("test_b3.xml"); foreach($tab_fic as $key => $value ) { echo 'Cet élément a pour clé "' . $key . '" et pour valeur "' . $value . '"<br />'; foreach($value as $key => $n ) { echo 'Cet élément a pour clé "' . $key2 . '" et pour valeur "' . $n . '"<br />'; } }
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 stdClass Object ( [source] => test_b3.xml [root] => stdClass Object ( [name] => n4ds:DSN [textValue] => [children] => Array ( [0] => stdClass Object ( [name] => n4ds:S10_G00_00 [textValue] => [children] => Array ( [0] => stdClass Object ( [name] => n4ds:S10_G00_00_001 [textValue] => GIPMDS ) [1] => stdClass Object ( [name] => n4ds:S10_G00_00_002 [textValue] => Cas17734_DSN mens ) [2] => stdClass Object ( [name] => n4ds:S10_G00_00_003 [textValue] => v99 ) [3] => stdClass Object ( [name] => n4ds:S10_G00_00_005 [textValue] => 02 ) [4] => stdClass Object ( [name] => n4ds:S10_G00_00_006 [textValue] => P03V01 ) [5] => stdClass Object ( [name] => n4ds:S10_G00_00_007 [textValue] => 01 ) [6] => stdClass Object ( [name] => n4ds:S10_G00_00_008 [textValue] => 01 ) [7] => stdClass Object ( [name] => n4ds:S10_G00_01 [textValue] => [children] => Array ( [0] => stdClass Object ( [name] => n4ds:S10_G00_01_001 [textValue] => 319814711 )
Partager