2011-08-17 13 views
7

Ho un file XML che assomiglia a questo:Come aggiungere a un file XML con PHP preferibilmente con SimpleXML

<?xml version="1.0" encoding="utf-8"?> 
<data> 
    <config> 
    </config> 

    <galleries> 
     // We have loads of these <gallery> 
     <gallery> 
      <name>Name_Here</name> 
      <filepath>filepath/file.txt</filepath> 
      <thumb>filepath/thumb.png</thumb> 
     </gallery> 
    </galleries> 
</data> 

ho cercato di capire come aggiungere un'altra galleria <> alla mia sopra xml file. Ho provato a utilizzare simplexml ma non ho potuto farlo funzionare, quindi ho provato questo answer e uno bunch di altri su StackOverflow. Ma non riesco a farlo funzionare.
Posso leggere facilmente da un file xml e ottenere tutte le informazioni di cui ho bisogno, ma devo essere in grado di aggiungere un tag galleria ad esso, Il codice qui sotto non funziona e quando lo fa, posso solo inserire 1 elemento, e lo inserisce 3 volte, non lo capisco.

$data = 'xml/config.xml'; 
// Load document 
$xml = new DOMDocument; 
$xml->load($data); #load data into the element 

$xpath = new DOMXPath($xml); 
$results = $xpath->query('/data/galleries'); 
$gallery_node = $results->item(0); 

$name_node = $xml->createElement('name'); 
$name_text = $xml->createTextNode('nametext'); 

$name_node = $name_node->appendChild($name_text); 

$gallery_node->appendChild($name_node); 

echo $xml->save($data); 

Ho avuto un sacco di tentativi falliti a questo, questo dovrebbe essere così facile. Fondamentalmente voglio aggiungere una galleria con nome file pathpath e thumb a questo stesso file (xml/config.php).

Come ho detto, l'ho fatto funzionare, ma non è formattato e non ha il tag della galleria.

Domanda
Come si inserisce un'altra galleria <> (con i bambini) nel file XML di cui sopra?
Preferibilmente anche usando SimpleXML

risposta

14

Con SimpleXML, è possibile utilizzare il metodo addChild().

$file = 'xml/config.xml'; 

$xml = simplexml_load_file($file); 

$galleries = $xml->galleries; 

$gallery = $galleries->addChild('gallery'); 
$gallery->addChild('name', 'a gallery'); 
$gallery->addChild('filepath', 'path/to/gallery'); 
$gallery->addChild('thumb', 'mythumb.jpg'); 

$xml->asXML($file); 

Essere consapevoli del fatto che SimpleXML non sarà "formato" XML per voi, ma passando da una rappresentazione SimpleXML non formattato XML per ordinatamente frastagliata non è un passo complicato ed è coperto in sacco di domande qui .

+0

Questo funziona! ma lo emette 3 volte nel mio xml, qualche idea del perché lo farebbe? emette 3 serie di e bambini sulla stessa riga, lo ha fatto anche con il mio script precedente? qualche indizio? – Anil

+2

Probabilmente stai facendo qualcosa di sbagliato in un ciclo. Niente di ciò che hai mostrato, o che ho dato, ripeterà l'elemento della galleria tre volte. – salathe