[PHP+XML] replaceNode

replaceNode [PHP+XML] - PHP - Programmation

Marsh Posté le 17-05-2006 à 10:44:24    

Salut a tous,
Je souhaite modifier un fichier xml dynamiquement. Dans ce cas la, je veut modifier les attribut d'un noeud. Je sais qu'il faut que j'utilise replaceNode mais a vrai dire je suis un peu perdu.
 
Fichier xml:
<Liste>
<File id="5" label1="la chose" data1="videos/videos4.flv" description="blablabla c\'est super cool ce machin chose" realiser="machin" date="01/01/01" url1="www.google.fr"/>
</Liste>
 
Code php:
<?php
$idf=$_POST['id'];
$mlabel1=$_POST["titre"];
$mdata1=$_POST["l_videos"];
$mdescription=$_POST["description"];
$mrealiser=$_POST["realiser"];
$mdate=$_POST["date"];
$marticle=$_POST["l_article"];
$mnomarticle="(lire la suite)";
 
if(!$dom=DOMDocument::load("videos.xml" )) {
//if(!$dom->load("videos.xml" )){
echo "Erreur lors de l'analyse du document\n";
exit;
}
$filesNodeList = $dom->getElementsByTagName('File');
foreach($filesNodeList as $fileNode){
$label1=$fileNode->getAttribute('label1');
$data1=$fileNode->getAttribute('data1');
if ( $fileNode->getAttribute('id') == $idf){
$titre=$fileNode->replaceNode($mlabel1, $label1);
$video=$fileNode->replaceNode($mdata1,$data1);
}
}
$dom->save("videos.xml" );
echo "reussi";
?>
 
Mon PHP ne marche pas... Est ce que quelqu'un pourrait m'aider?

Reply

Marsh Posté le 17-05-2006 à 10:44:24   

Reply

Marsh Posté le 17-05-2006 à 10:52:55    

apprends à te servir du DOM [:spamafote]
la tu cherches en fait à modifier la valeur d'un attribut en remplaçant un noeud, c'est nawak ( et d'ailleurs replaceNode ne prend qu'un param).
Il faut que tu utilises la fonction setAttribute.
 
edit: Et sans vouloir ronchonner, je t'avais déjà expliqué tout ça ici: http://forum.hardware.fr/hardwaref [...] 0344-1.htm


Message édité par anapajari le 17-05-2006 à 10:53:40
Reply

Marsh Posté le 17-05-2006 à 11:30:24    

Je sais que t'avais repondu mais quand tu t'y connait pas c'est dur de realiser le projet. COmme tu me l'a expliquer j'ai utiliser setAttribute.
 
<?php
$idf=$_POST['id'];
$mlabel1=$_POST["titre"];
$mdata1=$_POST["l_videos"];
$mdescription=$_POST["description"];
$mrealiser=$_POST["realiser"];
$mdate=$_POST["date"];
$marticle=$_POST["l_article"];
$mnomarticle="(lire la suite)";
 
if(!$dom=DOMDocument::load("videos.xml" )) {
echo "Erreur lors de l'analyse du document\n";
exit;
}
$filesNodeList = $dom->getElementsByTagName('File');
foreach($filesNodeList as $fileNode){
 
if ( $fileNode->getAttribute('id') == $idf){
$id=$fileNode->removeAttribute('id');
$id_a=$fileNode->setAttribute('id',$idf);
$titre=$fileNode->removeAttribute('label1');
$titre_a=$fileNode->setAttribute('label1',$mlabel1);
$videos=$fileNode->removeAttribute('data1');
$videos_a=$fileNode->setAttribute('data1',$mdata1);
$descri=$fileNode->removeAttribute('description');
$descri_a=$fileNode->setAttribute('description',$mdescription);
$realiser=$fileNode->removeAttribute('realiser');
$realiser_a=$fileNode->setAttribute('realiser',$mrealiser);
$date=$fileNode->removeAttribute('date');
$date_a=$fileNode->setAttribute('date',$mdate);
$urlnom=$fileNode->removeAttribute('urlnom');
$urlnom_a=$fileNode->setAttribute('urlnom',$mnomarticle);
$urllien=$fileNode->removeAttribute('urllien');
$urllien_a=$fileNode->setAttribute('urllien',$marticle);
}
}
$dom->save("videos.xml" );
echo "reussi";
?>  
 
Ca marche...enfin normalement...
Merci a toi de m'avoir aider... ;)

Reply

Marsh Posté le 17-05-2006 à 11:38:38    

Petite optimisation: t'as pas besoin de faire les removes. Si l'attribut existe déjà, la valeur sera mise à jour

Reply

Marsh Posté le 17-05-2006 à 16:12:14    

J'ai une tite question, tu m'avais dit de ne plus utiliser domxml mais DOM tout court mais une fois passer sur l'hebergeur( qui utilise php 4.3.1) voila les 2 erreurs qui apparait:
Fatal error:  Undefined class name 'domdocument' in
et  
Parse error: parse error, unexpected T_OBJECT_OPERATOR in
Sur free ca marchais, du moins pour la 2eme erreur.
Est ce du a la version de php?


Message édité par Fourmiz83 le 17-05-2006 à 16:15:25
Reply

Marsh Posté le 17-05-2006 à 16:24:42    

:D

Reply

Marsh Posté le 18-05-2006 à 09:12:17    

Je pense que ca doit etre ca non?

Reply

Marsh Posté le 18-05-2006 à 09:55:30    

dans ce genre de situation tu as

Code :
  1. <?php phpinfo();?>

pour savoir exactement ce dont tu disposes!

Reply

Marsh Posté le 18-05-2006 à 10:17:30    

je l'ai deja fait mais le truc c'est que j'ai pas l'extension DOMXML comme sur free...
 
domxml
DOM/XML  enabled
DOM/XML API Version  20020815
libxml Version  20624
HTML Support  enabled
XPath Support  enabled
XPointer Support  enabled
DOM/XSLT  enabled
libxslt Version  1.1.16
libxslt compiled against libxml Version  2.6.24
 
Cette extension n'y ai pas...
Je croix bien qu'il faut que j'abandonne PHP XML non?
En passant par SQL ca sera plus facile?

Reply

Marsh Posté le 18-05-2006 à 10:27:11    

Fais ta base de donnée manuellement une fois pour toutes, à base de fichiers txt (trouve une autre ext) sans XML. C'est la seule solution pour ne pas dépendre d'un hébergeur. Par contre, pour des gros projets, oublie. [:ddr555]
 

Reply

Marsh Posté le 18-05-2006 à 10:27:11   

Reply

Marsh Posté le 18-05-2006 à 10:52:29    

Si je passe par SQL, je peux pas généré de fichier XML, c'est mort de chez mort? Parce qu'en fait j'ai mon flahs qui lit un fichier xml et qui affiche des données...
 
Avec SQL je supprime ajout modifie et que ensuite je génére le fichier XML a chaque action, c'est possible?

Reply

Marsh Posté le 18-05-2006 à 10:57:24    

Fourmiz83 a écrit :

Si je passe par SQL, je peux pas généré de fichier XML, c'est mort de chez mort? Parce qu'en fait j'ai mon flahs qui lit un fichier xml et qui affiche des données...
 
Avec SQL je supprime ajout modifie et que ensuite je génére le fichier XML a chaque action, c'est possible?


 
Tu peux toujours réécrire avec fopen et tout le tralalala ton fichier XML [:spamafote] C'est pas toujours la mort suivant les cas, et avec quelques regexp, on peut faire des miracles et des trucs pas trop lents surtout en utilisant des motifs PCRE.

Reply

Marsh Posté le 18-05-2006 à 11:02:06    

Mouais oki...
Sinon si j'utilise ADODB et recorset est ce que le serveur va le supporter?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed