Comment utiliser DOM pour ajouter des données

Petit nouveau ! | 3 Messages

26 mai 2006, 18:47

Salut,

j'ai un fichier XML à modifier, je souhaiterais y ajouter des données :

Code : Tout sélectionner

<menu> <categorie nom='categorie1'> <bouton lien='page.html'>titre_de_la_page</bouton> </categorie> <categorie nom='categorie2'> <bouton lien='page2.html'>titre_de_la_page2</bouton> </categorie> <categorie nom='categorie3'> <bouton lien='page3.html'>titre_de_la_page3</bouton> </categorie> </menu>
Comment faire pour selectionner directement le noeud 'categorie3' et ajouter un 'bouton' à l'intérieur ? Je ne trouve pas la méthode qui me permet de selectionner directement le noeud voulu ..

Mammouth du PHP | 19672 Messages

26 mai 2006, 20:40

Ta question, quoique n'étant pas dénuée d'intérêt, est incomplète : avec quel langage manipules-tu ce fichier XML ? XSLT, PHP, Python, Java, C++, autre ?

On aurait l'aur un peu neuneu si on te donnait une méthode en PHP que que tu développes en Python par exemple, tu ne crois pas ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

27 mai 2006, 09:11

Je developpe en PHP, c'est la raison pour laquelle j'ai atterri sur ce forum :D

Mammouth du PHP | 19672 Messages

27 mai 2006, 09:19

Alors regarde du coté de SimpleXML
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

27 mai 2006, 10:00

Je croyais que simplexml permettait juste de lire et modifier ?

Eléphant du PHP | 493 Messages

27 mai 2006, 10:16

Je croyais que simplexml permettait juste de lire et modifier ?
N'est il pas ce que tu désires ? Ajouter des lignes dans ton flux XML et ainsi donc le modifier ? Si j'ai bien tout compris, la meilleure solution resterait d'ouvrir ton fichier avec SimpleXML et de l'envoyer dans DOM ou de l'ouvrir avec DOM. Tu modifies via DOM (il existe une foule de méthodes permettant de le faire). Et hop, le tour est joué.

Mammouth du PHP | 983 Messages

27 mai 2006, 13:45

Salut,
Comment faire pour selectionner directement le noeud 'categorie3' et ajouter un 'bouton' à l'intérieur ? Je ne trouve pas la méthode qui me permet de selectionner directement le noeud voulu ..
Avec XPath, ca se fait facilement:
<?php
$doc = new DOMDocument();
$doc->load('fichier.xml');
$xpath = new DOMXPath($doc);
#sélection de la balise 'categorie' avec son attribut bom = à 'categorie3' :
$q = "//categorie[@nom='categorie3']";
#execution de la requete
$result = $xpath->query($q);
try
{
	#$result est un DOMNodeList, une collection de DOMNode
	if(count($result) >0)
	{
	    #on se place sur le premier noeud trouvé
	    $node = $result->item(0);
            #creation de la balise 'button'
	    $elBtn = $doc->createElement('button');
	    #ajout d'un attribut
	    $elBtn->setAttribute('lien','page.html');

	    #creation de sa valeur
	    $txtNode = $doc->createTextNode('Titre du lien');
	    $elBtn->appendChild($txtNode);
		
	    #ajout du noeud au document
	    $node->appendChild($elBtn);
            #sauvegarde du fichier		
	    $doc->save('fichier.xml');
	}
}
catch(Exception $e)
{
	echo '<pre>' . $e->getTraceAsString() . '</pre>';
}
Biensûr, tu peux utiliser une requête XPath contenant des variables plutôt qu'une requête en dur.