Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1024 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  XML - suppresion de noeuds dynamiquement [erreur]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

XML - suppresion de noeuds dynamiquement [erreur]

n°1366635
Fourmiz83
Posté le 15-05-2006 à 16:27:13  profilanswer
 

BOnjour a tous,
Je souhaite supprimer un noeud de mon XML via PHP...J'ai une erreur qui apparait et
je n'arrive pas a la resoudre...

 

Code php

 
Code :
  1. <?php
  2. $idfile=$_POST['idfile'];
  3. if(!$dom = domxml_open_file("videos.xml" )) {
  4.   echo "Erreur lors de l'analyse du document\n";
  5.   exit;
  6. }
  7. $elements = $dom->get_elements_by_tagname($_POST['idfile']);
  8. //$parent = $ref->parent_node();
  9. //$element = $elements[0];
  10. //echo $element;
  11. //$children = $element->domxml_children();
  12. $child = $element->remove_child($elements);
  13. $dom->dump_file("videos.xml", false, true);
  14. echo "Article supprimer";
  15. ?>


ficheir xml:

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="style.css" type="text/css"?>
<Liste>
<File
id="1" label1="Exposition 'RE-INVENTEZ-VOUS' de J-L TORMOS"
data1="videos/videos1.flv" description="La rencontre d’un artiste"
realiser="Réalisation Nom Prenom" date="Le 04/02/2006" urlnom="Google"
urllien="http://www.google.fr"/>
</Liste>

 

Merci d'avance pour votre aide...

mood
Publicité
Posté le 15-05-2006 à 16:27:13  profilanswer
 

n°1366638
_darkalt3_
Proctopathe
Posté le 15-05-2006 à 16:29:51  profilanswer
 

il est valide ton xml ?
il manquerait pas un </File> ?

n°1366644
Fourmiz83
Posté le 15-05-2006 à 16:36:56  profilanswer
 

/> cette syntaxe ferme la balise normalement...C'est le racourci de </File> non?

n°1366652
_darkalt3_
Proctopathe
Posté le 15-05-2006 à 16:43:23  profilanswer
 

mouais;
je prefere fermer les balises explicitement
 
avec les balises ca donne:

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <?xml-stylesheet href="style.css" type="text/css"?>
  3. <Liste>
  4.    <File id="1" label1="Exposition 'RE-INVENTEZ-VOUS' de J-L TORMOS" data1="videos/videos1.flv" description="La rencontre d’un artiste" realiser="Réalisation Nom Prenom" date="Le 04/02/2006" urlnom="Google" urllien="http://www.google.fr" </File>
  5. </Liste>


Message édité par _darkalt3_ le 15-05-2006 à 16:49:11
n°1366669
anapajari
s/travail/glanding on hfr/gs;
Posté le 15-05-2006 à 16:59:21  profilanswer
 

ton fichier xml est correctement, c'est ton traitement php qui suxxe :o ( d'ailleurs ce post n'a rien a faire dans la cat XML/XSL).
 
Tout d'abord le module DOMXML de php est à proscrire, depuis la version 4.3.0 il faut utiliser le DOM ( tout court ).
Ensuite tu mélanges getElementsByTagName et getElementById, si tu passes un id à la 1ere fonction alors que celle-ci s'attend à un nom de balise ça risque pas de marcher.  
Enfin pour pouvoir faire un removeChild il faut être sur le "père" du noeud que l'on veut supprimer.
 
Morale de l'histoire, le code devrait ressembler à:

Code :
  1. <?php
  2. $idFile=1;
  3. if(!$dom = DOMDocument::load("videos.xml" )) {
  4.   echo "Erreur lors de l'analyse du document\n";
  5.   exit;
  6. }
  7. $filesNodeList = $dom->getElementsByTagName('File');
  8. foreach($filesNodeList as $fileNode){
  9.   if ( $fileNode->getAttribute('id') == $idFile){
  10.     $fileNode->parentNode->removeChild($fileNode);
  11.   }
  12. }
  13. $dom->save("videos.xml" );
  14. ?>


Note: le test via le getAttribute est obligatoire, tu ne peux pas te servir de getElementById( ce qui t'aurais grandement simplifier la vie)...
Enfin si tu pourrais te servir de getElementById mais tu dois auparavant valider ton document via DOMDocument->validate() avec une DTD qui définie l'attribut ID ( ce qui je pense n'est pas pour tout de suite)

n°1367144
Fourmiz83
Posté le 16-05-2006 à 09:32:21  profilanswer
 

Merci beaucoup de m'avoir repondu...Tu m'a bien eclairer sur le removeChild et la difference entre getelementByTagName et GetElementById...
Je voulais utiliser DOM au lieu de DOMXML mais c'a me mettait tout plein d'erreur...
Il reste encore une erreur : Fatal error: Call to undefined function: load() mais je vais essayer de trouver d'ou ca vient...
 
Comme tu ma l'air bien caler en xml, j'ai une tite question pour créer un fichier xml faut mieux passer par une DTD avant? Je sais pas si j'ai été clair dans ma question...
 
 

n°1367180
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-05-2006 à 09:55:15  profilanswer
 

Pour le problème du load n'aurrais tu point oublier le DOMDocument:: devant?
 
Ta question est pas specialement claire mais en gros:
- un bon article sur l'interet des DTD
- a mon avis, un DTD est obligatoire lorsqu'il y a "echange" entre différentes entités du flux xml et ce afin de s'assurer de la validité de celui-ci. Si c'est juste pour toi l'interêt est pas énorme, si tu bosses en equipe à vous de pesez le pour et le contre


Message édité par anapajari le 16-05-2006 à 09:55:40
n°1367393
Fourmiz83
Posté le 16-05-2006 à 12:49:07  profilanswer
 

Pour le probleme de load j'ai un peu chercher sur Internet et finallement j'ai toruver une soluction qui disait de mettre le fichier en .php5 et ca a marcher.
 
En fait je suis actuellement en stage je suis en train de créer un player videos en flash géré par xml et avec la partie administration en php/xml. Je me posait la question si je devais créer une DTD ou pas en faite...
 
J'ai deux autre petite question je doit faire la modification d'article est ce qu'il faut mieux que j'utilise replaceNode ou bien que quand l'utilisateur clique su rmodifier ca supprimer l'ancien noeud et il en recré un autre?
 
Et mon autre petite question j'ai une liste deroulante qui sleectionne un article et il affiche un formulaire avec des champs de texte et les attribut du xml dedans seulement il m'affiche seulement le premier mot de l'attribut...Je sais pas d'ou ca vient...quand je fait echo ($lavraible); ca marche y a tout le texte...

n°1367435
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-05-2006 à 13:25:14  profilanswer
 

Fourmiz83 a écrit :

je doit faire la modification d'article est ce qu'il faut mieux que j'utilise replaceNode ou bien que quand l'utilisateur clique su rmodifier ca supprimer l'ancien noeud et il en recré un autre?


ça revient au même de faire un replaceNode et de créer puis de supprimer ton noeud ( sauf que dans ce cas l'ordre des entités dans ton flux peut ne pas être conservé).
La question est plutot: dois-je modifier les valeurs et attributs de l'entité concernée ou la recréer... Et la il n'y a que toi qui peut répondre ;)
 

Fourmiz83 a écrit :

Et mon autre petite question j'ai une liste deroulante qui sleectionne un article et il affiche un formulaire avec des champs de texte et les attribut du xml dedans seulement il m'affiche seulement le premier mot de l'attribut...Je sais pas d'ou ca vient...quand je fait echo ($lavraible); ca marche y a tout le texte...

rien compris  [:pingouino]  code?

n°1367467
Fourmiz83
Posté le 16-05-2006 à 13:43:53  profilanswer
 

En fait pour pouvoir modifier l'article j'ai créer un menu deroulant qui va vers un page php. Cette page php contient un formulaire avec des champs de texte. Les champs de texte sont remplis depuis le fichier xml avec le titre, date,...
 
code php
 
<?php
$idFile=$_POST['idfile'];
//$dom=new::DOMDocument();
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 $file){
$titre=$file->getAttributeNode("label1" )->value;
$realiser=$file->getAttributeNode("realiser" )->value;
$date=$file->getAttributeNode("date" )->value;
$description=$file->getAttributeNode("description" )->value;
$lvideos=$file->getAttributeNode("data1" )->value;
$urlliens=$file->getAttributeNode("urllien" )->value;
$urlnom=$file->getAttributeNode("urlnom" )->value;
$id=$file->getAttributeNode("id" )->value;
if ( $id == $idFile){
echo "<form method='post' action='modif_f.php'><BR>";
echo "<input name='titre' type='text' value=".$titre." size='70'><BR>";
echo "<input name='realiser' type='text' value=".$realiser." size='50'><BR>";
echo "<input name='date' type='text' value=".$date." size='10'><BR>";
echo "<textarea name='description' cols='66' rows='4'>".$description."</textarea><BR>";
echo "<input name='date' type='text' value=".$date." size='50'><BR>";
echo "<input name='l_videos' type='text' value=".$lvideos." size='50'><BR>";
echo "<input name='l_article' type='text' value=".$urlliens." size='50'><BR>";
echo "<input name='soumettre' type='submit' value='Modifier'>";
echo "</form>";
}
}
?>
 
Dans es champs de texte y a juste le premier mot de chaque attribut du XML...
Petite capture de ce que ca donne:
 
http://designmania.free.fr/capture.png


Message édité par Fourmiz83 le 16-05-2006 à 13:45:08
mood
Publicité
Posté le 16-05-2006 à 13:43:53  profilanswer
 

n°1367478
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-05-2006 à 13:51:11  profilanswer
 

s'quoi ces grosses bouses là:

Code :
  1. $titre=$file->getAttributeNode("label1" )->value;
  2. $realiser=$file->getAttributeNode("realiser" )->value;
  3. $date=$file->getAttributeNode("date" )->value;
  4. $description=$file->getAttributeNode("description" )->value;
  5. $lvideos=$file->getAttributeNode("data1" )->value;
  6. $urlliens=$file->getAttributeNode("urllien" )->value;
  7. $urlnom=$file->getAttributeNode("urlnom" )->value;
  8. $id=$file->getAttributeNode("id" )->value;


C'est normal tu t'amuses a retourner un noeud puis tu utilises value dessus au lieu de nodeValue.
Et de toute manière tu as une fonction qui te récupère directement l'attribut: http://fr.php.net/manual/fr/functi [...] ribute.php

n°1367516
Fourmiz83
Posté le 16-05-2006 à 14:17:48  profilanswer
 

Ouais mais meme avec getAttribute ca fait ca....


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  XML - suppresion de noeuds dynamiquement [erreur]

 

Sujets relatifs
php / mysql erreur enregistrement[Delphi 6] XML Mapper
Mettre dynamiquement un JPanel au dessus d'un autreOutils pour générer des DTD's à partir de documents XML
[Java et XML] Traitement d'un fichier XML avec JAVA[XML] Ajout d'un noeud au debut
[XML/XSL/Javascript] Transformer du XML en javascript[Résolu] PHP + IIS = erreur d'extension mysql
Erreur de compilation lié à la généricité et type dérivé de Finalizat°[Résolu] Erreur w3c que je ne comprends pas
Plus de sujets relatifs à : XML - suppresion de noeuds dynamiquement [erreur]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR