php5 et DOMDocument

php5 et DOMDocument - PHP - Programmation

Marsh Posté le 18-10-2006 à 21:40:55    

Bonjour,
 
J'ai un souci avec un bout de code php. Le concept est le suivant :
Je désire ajouter une occurrence de new dans un fichier xml à la structure suivante
 

Code :
  1. <new id="0">
  2. <auteur>
  3. test
  4. </auteur>
  5. <titre>
  6. test
  7. </titre>
  8. <texte>
  9. test
  10. </texte>
  11. </new>
  12. <new id="1">
  13. <auteur>
  14. test
  15. </auteur>
  16. <titre>
  17. test
  18. </titre>
  19. <texte>
  20. test
  21. </texte>
  22. </new>


 
Voici mon code, si mon fichier existe, je créé un nouvel objet DOMDocument, je charge mon fichier.
Je récupère le nombre d'élements, qui me sert à écrire l'attribut de la nouvelle occurrence que j'essaye d'ajouter.
 

Code :
  1. <?php
  2. if (file_exists("news.xml" )) {
  3. $doc = new DOMDocument('1.0');
  4. $doc->load("news.xml" );
  5. $doc->formatOutput = true;
  6. $myNodeList= $doc->getElementsByTagName("new" );
  7. //echo $myNodeList->length;
  8. $post_auteur = "test";
  9. $new_element = $doc->createElement('new');
  10. $auteur = $doc->createElement('auteur',$post_auteur);
  11. $new_element->appendChild($auteur);
  12. $title = $doc->createElement('titre',$post_auteur);
  13. $new_element->appendChild($title);
  14. $text = $doc->createElement('texte',$post_auteur);
  15. $new_element->appendChild($text);
  16. $new_element->setAttributeNode(new DOMAttr('id',$myNodeList->length));
  17. $doc->appendChild($new_element);
  18. //echo($doc->saveXML());
  19. $doc->save("news.xml" );
  20. }
  21. else echo("erreur" );
  22. ?>


 
Le drame étant que, 1 coup sur 2 j'obtient cette erreur :
 

Citation :

Warning: DOMDocument::load() [function.DOMDocument-load]: Extra content at the end of the document in /mnt/123/sdc/0/7/tonio95/test/news.xml, line: 7 in /mnt/123/sdc/0/7/tonio95/test/add_news.php5 on line 5


 
l'autre fois, mon fichier xml contient la structure présentée plus haut.
 
J'avoue ne pas bien comprendre ce qu'il se passe, pouvez vous m'éclaicir les idées ?
Merci de votre participation.

Reply

Marsh Posté le 18-10-2006 à 21:40:55   

Reply

Marsh Posté le 25-10-2006 à 01:44:55    

voici une réponse (avec xpath) :
 

Code :
  1. <?php
  2. $erreur = false;
  3. if ($_POST["auteur"]=='')$erreur=true;
  4. if ($_POST["titre"]=='')$erreur=true;
  5. if ($_POST["texte"]=='')$erreur=true;
  6. if (file_exists("news.xml" ) && (!($erreur))) {
  7. $doc = new DOMDocument('1.0');
  8. $doc->load("news.xml" );
  9. $doc->formatOutput = true;
  10. $new_id = $doc->getElementsByTagName("new" )->length; // nombre de news total
  11. $xpathdoc= new DOMXPath($doc);
  12. $nodes = $xpathdoc->query('//news');
  13. $new_element = $doc->createElement('new',"" );
  14. $new_element->setAttribute("id",$new_id+1);
  15. $auteur = $doc->createElement('auteur',$_POST["auteur"]);
  16. $new_element->appendChild($auteur);
  17. $title = $doc->createElement('titre',$_POST["titre"]);
  18. $new_element->appendChild($title);
  19. $text = $doc->createElement('texte',$_POST["texte"]);
  20. $new_element->appendChild($text);
  21. $nodes->item(0)->appendChild($new_element);
  22. $doc->save("news.xml" );
  23. return(true);
  24. }
  25. else {
  26. return(false);
  27. }

Reply

Marsh Posté le 25-10-2006 à 08:42:43    

par ailleurs, normal qu'il n'y ait pas de rootNode sur ton document?

Reply

Marsh Posté le 26-10-2006 à 03:27:29    

non, a corriger. sinon ca marche.


Message édité par tonio95 le 26-10-2006 à 03:28:16
Reply

Sujets relatifs:

Leave a Replay

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