Espace membre :
flechePublicité

3 messages
Filtrer ok

PHP + DOM pour .xml - Supprimer et Modifier un noeud.

   Php
Bon, j'ai beau cherché j'ai du mal... J'aimerais dans un premier temps pouvoir supprimer un noeud à l'aide de DOM dans un document XML. J'ai vu ici qu'il fallait valider le document, je viens de passer pas mal de temps, mais j'ai enfin réussi à créer le DTD pour mon fichier RSS en XML. J'utilise PHP5.

Voilà ou j'en suis :

test.php5 :
Code :
<?php

$fxml='test.xml';
$dom = new DomDocument();
$dom->load($fxml);
if ($dom->validate()) {
   echo "Ce document est valide !\n";   
}

$nya=$dom->getElementById("1");
var_dump($nya);

//$chan->removeChild($e);

$dom->save($fxml);

?>


Il me retroune : "Ce document est valide ! NULL"


test.xml :
Code :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE rss SYSTEM "http://warzone.fr/rss.dtd">
<rss version="2.0">
<channel id="news">
  <title>WarZone.fr</title> 
  <link>http://warzone.fr/</link> 
  <description>Toute l'actualité au quotidien sur les MMO, MMORPG, CORPG.</description>
  <language>fr</language> 
  <copyright>Copyright 2006-2007 - WarZone.fr - Tous droits réservés</copyright>
  <pubDate>Sat, 03 Feb 2007 17:29:00 +0100</pubDate>

  <item id="1">
  <title>Wahou3</title>
  <link>http://google.fr</link>
  <pubDate>today</pubDate>
  <description>C'est trop bien !bis</description>
  </item>

</channel>
</rss>


rss.dtd :
Code :
<!ELEMENT rss (channel)>
<!ATTLIST rss version CDATA #FIXED "2.0">

<!ELEMENT channel (title,link,description,language,copyright,pubDate,
                   (webMaster,category,image)?,item+)>

<!ATTLIST channel id CDATA #IMPLIED >

<!ELEMENT item (title,link,pubDate,description,
                (author|jeu)?)>

<!ATTLIST item id CDATA #IMPLIED >

<!ELEMENT author (#PCDATA)>
<!ELEMENT jeu (#PCDATA)>
<!ATTLIST jeu name CDATA #IMPLIED >
<!ELEMENT category (#PCDATA)>
<!ELEMENT copyright (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT height (#PCDATA)>
<!ELEMENT image (url,title,link,(width|height|description)*)>
<!ELEMENT language (#PCDATA)>
<!ELEMENT link (#PCDATA)>
<!ELEMENT pubDate (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT url (#PCDATA)>
<!ELEMENT webMaster (#PCDATA)>
<!ELEMENT width (#PCDATA)>
 
 
Dans ta DTD, <!ATTLIST item id ID #IMPLIED >

Et pas CDATA.
Modérateur Logiciel - Programmation
 
 
Tout simplement...
Après quelque recherches, j'ai vu qu'il fallait obligatoirement commencé par une lettre dans un attribut de classe ID. J'ai donc enfin résolu mon problème et j'arrive parfaitement à supprimer. J'utilise une méthode qui n'est pas la plus jolie je pense, mais qui fonctionne très bien cependant :

Code :
$nya=$dom->getElementById("id1");
var_dump($nya);
$nya->nodeValue = '';
$nya->parentNode->removeChild($nya);


Et voilà, quand j'aurais fini je me pencherais sur l'edit, a vue de pied je pense qu'il faut simplement modifier la valeur d'un noeud, avec textNode je crois, enfin je m'y pencherais plus tard !

Merci Sans-Nom !
 
 
     
3 messages
Filtrer ok
Vous devez être connecté pour écrire un message !

BE GEEK ! Avec

flechePublicité