2010-07-05 10 views
6

tengo un problema con simpleXml y agrego nuevos elementos. Este es mi xml:Agregue child to xml con PHP simpleXml

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

Im usando este código php:

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

Este es el resultado:

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

Esto crea mi nuevo artículo en su nodo, pero quiero añadir el artículo a el mismo nodo de elementos ya existentes.

Respuesta

9

entonces, no debe crear nuevos elementos de nodo:

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

¿Ha intentado hacer de la siguiente manera

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

O

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

Se puede utilizar esta clase para SimpleXML objetos que aceptan niños anexan

<?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); 
       } 
      } 
     } 
    } 
Cuestiones relacionadas