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 :

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
        }
    }
Mais pour une raison que j'ignore j'ai 2 problèmes :

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 ?

Cannot add element to-ports number 1 when only 0 such elements exists.
Plusieurs fois, avant de conclure sur :
Uninitalized string offset: 1
2) Il me tronque ce qu'il y a dans le tableau : Exemple :

<msg t='sys'><body action='apiOK' r='0'></body></msg>
Devrai retourner pour
$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...)
A noter que ça ne bug que pour $this->parametre[$niveau][$numref].

Pouvez vous m'éclairer s'il vous plait ? Merci d'avance !