SimpleXML - Ajouter au debut
le 22/11/2010 à 09:36
Keika
Salut,
j'essaye de manipuler du XML, alors mon code fonctionne, j'ajoute correctement mes noeuds. Maintenant, j'aimerais que les noeuds soient ajouter au debut du fichier et non pas a la fin.
Ici mon code:
<?php
//We set variables
$flyer = '11.jpg'/*$_POST['flyer']*/ ;
$heading = 'Test'/*$_POST['heading']*/ ;
$date = 'Tuesday'/*$_POST['date']*/ ;
$link = "http://xxx.com/imgs/".$flyer ;
$xml = simplexml_load_file('test.xml');
$promo = $xml->addChild('promo') ;
$promo->addChild('thumb', 'imgs/'.$flyer) ;
$promo->addChild('heading', $heading) ;
$promo->addChild('date', $date) ;
$promo->addChild('large', 'imgs/'.$flyer) ;
$promo->addChild('weblink', $link) ;
//$file = fopen('test.xml', 'w') ;
$xml->asXML('test.xml') ;
?>
Une idee ?
Le PHP --> C'est dur !
C'est possible de choisir la position du noeud avec simpleXml ?
J'avoue avoir un vieux doute la.
Personnellement, j'utilise simpleXml juste pour parser des fichiers XML afin de les insérer en base, mais dès que je manipule du XML, j'utilise de préférence l'extension DOM qui offre énormément plus de possibilité.
Quelqu'un
ici a eu le même soucis que toi, et il est passé aussi au DOM.
le 24/11/2010 à 16:02
Keika
Merci GLOBULE,
j'ai bien essaye et reussit avec cette solution.
j'ai donc ce code:
<?php
$dom = new DomDocument();
$dom->load('test.xml');
$racine=$dom->documentElement;
//$message=$dom->createElement("p");
//$message=$racine->appendChild($message);
$promo = $dom->createElement('promo');
$elementThumb = $dom->createElement('thumb', 'imgs/'.$flyer) ;
$elementHeading = $dom->createElement('heading', $heading) ;
$elementDate = $dom->createElement('date', $date) ;
$elementFlyer = $dom->createElement('large', 'imgs/'.$flyer) ;
$elementWeblink = $dom->createElement('weblink', $link) ;
//Insère $div avant le 1er fils de $racine
$promo->appendChild($elementThumb);
$promo->appendChild($elementHeading);
$promo->appendChild($elementDate);
$promo->appendChild($elementFlyer);
$promo->appendChild($elementWeblink);
$racine->insertBefore($promo, $racine->firstChild);
$dom->save('test.xml') ;
?>
Maintenant, je vais etre pointilleux et ennuyant. Le code s'integre au fichier de facon lineaire. Donc pour le script c'est pas un vrai soucis mais pour la facilite de lecture ce n'est pas l'ideal. Une idee sur comment indente le code sauvegarde au fichier ?
Merci
Le PHP --> C'est dur !
Pour ca, tu as l'
extension tidy qui peut reformater un XML :)
(ca existe aussi en
binaire standalone pour pouvoir le faire tourner sur un XML en local sans appeler PHP).
le 24/11/2010 à 16:22
Keika
hmm, peut etre que je ne vais pas pousser jusque la..
Le PHP --> C'est dur !
Je penses que tu as raison, surtout qu'en général, un browser les affiche bien :)
Donc bon, l'ouvrir dans un editeur de texte ou un browser, c'est "pareil".
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: