Page 1 sur 1

Comment utiliser DOM pour ajouter des données

Posté : 26 mai 2006, 18:47
par linkowich
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 ..

Posté : 26 mai 2006, 20:40
par Cyrano
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 ?

Posté : 27 mai 2006, 09:11
par linkowich
Je developpe en PHP, c'est la raison pour laquelle j'ai atterri sur ce forum :D

Posté : 27 mai 2006, 09:19
par Cyrano
Alors regarde du coté de SimpleXML

Posté : 27 mai 2006, 10:00
par linkowich
Je croyais que simplexml permettait juste de lire et modifier ?

Posté : 27 mai 2006, 10:16
par Vaedan
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é.

Re: Comment utiliser DOM pour ajouter des données

Posté : 27 mai 2006, 13:45
par rami
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.