Newsgroup: it.comp.www.php
Titolo: XML DOM rimuovere nodo

Ciao a tutti ragazzi, ho un file xml formattato in questa maniera
<newslist>
    <news>
          <ID>1</ID>
          <data>21.08.2009</data>
          <titolo>Primo inserimento</titolo>
          <descrizione>prima news</descrizione>
          <immagine>upload/img0.jpg</immagine>
  </news>
    <news>
          <ID>2</ID>
          <data>22.08.2009</data>
          <titolo>Secondo inserimento</titolo>
          <descrizione>seconda news</descrizione>
          <immagine>upload/img1.jpg</immagine>
  </news>
    <news>
          <ID>3</ID>
          <data>22.08.2009</data>
          <titolo>terzo inserimento</titolo>
          <descrizione>terz2 news</descrizione>
          <immagine>upload/img2.jpg</immagine>
  </news>
</newslist>
Sto cercando come un pazzo ma non trovo da nessuna parte come fare per
eliminare un elemento con un determinato <ID> </ID> con
DOM
Qualcuno sa un link che aiuti bene a capire quello che devo fare io ?
magari con degli esempi?
Grazie a tutti per la collaborazione

 eliminare un elemento con un determinato <ID> </ID> con DOM
Lo devi fare a mano.
Avresti potuto fare qualcosa in semi-automatico se fosse stato
<news id="1"> ... </news>
ma cosi` devi fare un foreach sui news, cercare per ognuno il figlio 
"id", controllarne il valore, e quindi rimuovere il news dall'elemento 
newslist.
 
Bye.

 Lo devi fare a mano.
Mi sembra strano che non ci sia una libreria php già pronta per il 
parsing XML.

 parsing XML.
Per il parsing ce ne sono diverse, e infatti Antonio parla di DOM, quindi 
immagino stia usando DOMDocument.
Ma non tutto puo` essere automatizzato, anche con queste librerie. Deve 
navigare "a mano" nel DOM, cercare quello che gli serve e trovare da solo 
cosa togliere.
Non e` come in SQL che basta un "delete from tabella where id=x" :)
Bye.


L'unica cosa che mi viene in mente è appunto "fare a mano" come ti
hanno detti, carichi il file xml con DOM e poi costruisci un altro
oggetto DOM avendo cura di non includere quello con l'ID che vuoi
escludere. Come se dovessi "travasare" due liste in vecchio stile C


Io aprirei il documento con SimpleXML, e riscriverei il documento
saltando l'id che dici tu. E' molto veloce come operazione, non ho
provato, ma credo si tratti di un ciclo, ed un if. Fai sapere se
riesci a trovare una soluzione.

Non è il codice più bello del mondo, ma credo che possa per lo meno
esserti di aiuto. Che cosa fa: fa che apre il file xml (ho fatto un
copia incolla del tuo file quindi so che funziona =). Percorre tutti
gli elementi del tuo file e con un banale if scarta l'id indesiderato
(che se non sbaglio è esattamente quello che ti serve). Per ogni
iterazione ricostruisce una stringa con il nuovo file XML. A fine
documento lo faccio stampare in modo che sia visibile nel browser.
Questo script è decisamente banale. Però spero che possa esserti di
aiuto. Ciao bel!
<?php
    $file_xml = "file.xml";
    $id_da_escludere = "1";
    if (file_exists($file_xml))
    {
        $xml = simplexml_load_file($file_xml);
        foreach($xml as $item)
            if($item->ID!=$id_da_escludere)
            {
                $new_xml .= "
	<news>
		<ID>{$item->ID}</ID>
		<data>{$item->data}</data>
		<titolo>{$item->titolo}</titolo>
		<descrizione>{$item->description}</descrizione>
		<immagine>{$item->immagine}</immagine>
	</news>";
            }
    }
    else
    {
        exit("Non sono riuscito a trovare il file '{$file_xml}'.");
    }
    $new_xml = "<newslist>{$new_xml}\n</newslist>";
?>
<pre>
    <?php echo htmlentities($new_xml); ?>
</pre>