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

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 :

<?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 :

<?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 :

<!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.

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 :

$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 :wink: !

Merci Sans-Nom :wink: !