Добавить ребенка в xml с помощью PHP simpleXml

У меня проблема с simpleXml и добавление новых элементов. Это мой xml:

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

Я использую этот php-код:

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

Это результат:

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

Это создает мне узел новых элементов, но я хочу добавить элемент в тот же уже существующий узел.

то вы не должны создавать узел новых элементов:

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

Вы пробовали сделать следующее

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

Или

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

Вы можете использовать этот класс для объектов SimpleXML, которые принимают дочерние приложения

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