Ajouter un noeud xml

Eléphanteau du PHP | 21 Messages

05 juil. 2006, 11:57

Bonjour,

Je dispose d'un fichier xml de cette forme ci:

Code : Tout sélectionner

<?xml version="1.0"?> <configuration> <langue>fr</langue> <installation>debut</installation> </configuration>
Ce fichier xml doit être manipulé par un installeur php pour donner quelque chose de cette allure-ic:

Code : Tout sélectionner

<?xml version="1.0"?> <configuration> <langue>fr</langue> <installation>fin</installation> <bdd type="SQLite"> <fichier>includes/base.bdd</fichier> </bdd> </configuration>
Je ne rencontre aucun problème pour insérer le premier noeud bdd dans le noeud configuration. Voici le code utilisé:
$this->config = simplexml_load_file('config.xml');
$domElement = dom_import_simplexml($this->config);

$dom = new DOMDocument('1.0');
$domElement = $dom->importNode($domElement, true);
$noeud = $dom->appendChild($domElement);
$noeud = $noeud->appendChild($dom->createElement('bdd'));
$noeud->setAttribute('type', $this->typesBDD[$_POST['typebdd']]);

$this->config = simplexml_import_dom($dom);
$this->config->installation = 'parambdd';
$this->config->asXML('config.xml');
Par contre, je rencontre quelques pour insérer le second noeud fichier dans le noeud bdd. J'utilise actuellement cette solution, qui ne me satisfait pas:
$this->config = simplexml_load_file('config.xml');
$domElement = dom_import_simplexml($this->config);

$dom = new DOMDocument('1.0');
$domElement = $dom->importNode($domElement, true);
$noeud = $dom->appendChild($domElement);
$noeud = $noeud->getElementsByTagName('bdd')->item(0);
$noeud = $noeud->appendChild($dom->createElement('fichier', $_POST['fichier']));

$this->config = simplexml_import_dom($dom);
$this->config->installation = 'fin';
$this->config->asXML('config.xml');
Cette solution ne me satisfait pas car je ne parviens pas à cibler correctement le noeud bdd pour appliquer la fonction appendChild. En effet, je choisis le premier noeud avec ce nom (item(0)). Que se passera-t-il si dans l'avenir je me retrouve avec d'autres noeuds bdd? Comment faire pour choisir le bon?

J'ai essayer de le cibler avec childNodes mais j'arrive encore au même problème... Bref, je n'arrive pas à passer d'un noeud à l'autre de façon efficace dans le DOM.