Bonjour à vous !
Je ne suis pas un expert de programmation et j'ai donc besoin de vos lumières.
Actuellement, j'essaye de faire du parsing d'xml.
J'ai donc trouvé, corrigé et adapté une fonction qui va me servir à effectuer des actions en fonction des balises. Voici la fonction :
Mais pour une raison que j'ignore j'ai 2 problèmes :
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 public function parseXML($xml, $niveau = 0, $numref = 0) { // Pour chaque item, on récupere la balise(nom) et l'objet SimpleXML de la balise foreach($xml as $balise[$niveau]=>$node) { // On vérifie qu'il y a un noeud enfant $this->balise[$niveau] = $balise[$niveau]; $this->EcrireTXT("<br />".$niveau." Balise ".$this->balise[$niveau]); $enfants[$niveau] = $node->children(); // On récupere les enfants $attributs[$niveau] = $node->attributes(); // On récupère les attributs if(trim($attributs[$niveau]) != "") { // S'il y en a foreach($attributs[$niveau] as $parametre[$niveau]=>$valeur[$niveau]) { //$this->EcrireTXT("<br/>Référence des parametres et de leurs valeurs : ".$numref."<br />"); $this->parametre[$niveau][$numref] = $parametre[$niveau][$numref]; $this->valeur[$niveau][$numref] = $valeur[$niveau][$numref]; $this->EcrireTXT(" >> ".$this->parametre[$niveau][$numref]." = <em>'".$valeur[$niveau][$numref]."'</em>"); $numref += 1; } } if(trim($node) !== "") { //Si la balise contient une valeur $this->EcrireTXT(" contient la valeur <em>'".$node."'</em> "); } $this->parseXML($enfants[$niveau], $niveau + 1, $numref = 0); // comme on a un enfant, on réappelle la fonction ) niveau +1 } }
1) si je comprends bien, parfois $numref passe une itération à une valeur de +1 par rapport à ce que la case du tableau peut contenir, c'est bien cela ? (Cas ou il n'y a pas + d'un seul paramètre/valeur)
Est-ce pour ça que j'ai l'erreur suivante ?
2) Il me tronque ce qu'il y a dans le tableau : Exemple :Cannot add element to-ports number 1 when only 0 such elements exists.
Plusieurs fois, avant de conclure sur :
Uninitalized string offset: 1
Devrai retourner pour<msg t='sys'><body action='apiOK' r='0'></body></msg>
A noter que ça ne bug que pour $this->parametre[$niveau][$numref].$this->parametre[1][0] : la valeur 'action' et
$this->parametre[1][1] : la valeur 'r'
Sauf qu'il me retourne :
$this->parametre[1][0] : la valeur 'a'
$this->parametre[1][1] : la valeur '' (rien du tout...)
Pouvez vous m'éclairer s'il vous plait ? Merci d'avance !
Partager