2010-07-05 18 views
6

Ich habe ein Problem mit SimpleXml und neue Elemente hinzufügen. Das ist mein xml:Add Kind zu XML mit PHP SimpleXml

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <items>    
    <item>abc</item> 
    <item>def</item> 
    <item>ghi</item> 
</items> 
</root> 

Im diesen PHP-Code verwenden:

$xml = simplexml_load_file("myxml.xml"); 
$sxe = new SimpleXMLElement($xml->asXML()); 
$newItem = $sxe->addChild("items"); 
$newItem->addChild("item", $newValue); 
$sxe->asXML("myxml.xml"); 

Dies ist das Ergebnis:

<?xml version="1.0" encoding="utf-8"?> 
    <root> 
     <items>    
     <item>abc</item> 
     <item>def</item> 
     <item>ghi</item> 
     </items> 
     <items> 
     <item>jkl</item> 
     </items> 
    </root> 

Das schafft mir neue Objekte Knoten, aber ich hinzufügen möchten Artikel zu der gleiche bereits vorhandene Artikel Knoten.

Antwort

9

dann sollten Sie keine neuen Elemente Knoten erstellen:

$xml = simplexml_load_file("myxml.xml"); 
$sxe = new SimpleXMLElement($xml->asXML()); 
$itemsNode = $sxe->items[0]; 
$itemsNode->addChild("item", $newValue); 
$sxe->asXML("myxml.xml"); 
0

Haben Sie versucht, die folgende Art und Weise zu tun

$newItem->root->items[0]->addChild("item","Test"); 

Oder

$newItem->root->items->addChild("item","Test"); 
0

Sie diese Klasse SimpleXML verwenden können Objekte, die Kinder anhängen

<?php 

    class MySimpleXMLElement extends SimpleXMLElement 
    { 
     /** 
     * Add SimpleXMLElement code into a SimpleXMLElement 
     * 
     * @param MySimpleXMLElement $append 
     */ 
     public function appendXML($append) 
     { 
      if ($append) { 
       if (strlen(trim((string)$append)) == 0) { 
        $xml = $this->addChild($append->getName()); 
       } else { 
        $xml = $this->addChild($append->getName(), (string)$append); 
       } 

       foreach ($append->children() as $child) { 
        $xml->appendXML($child); 
       } 

       foreach ($append->attributes() as $n => $v) { 
        $xml->addAttribute($n, $v); 
       } 
      } 
     } 
    }