使用PHP simpleXml将子项添加到xml

时间:2010-07-05 08:34:27

标签: php editor 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>

这会创建新项目节点,但我想将项目添加到相同的现有项目节点。

3 个答案:

答案 0 :(得分:10)

然后,您不应该创建新项目节点:

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

答案 1 :(得分:0)

您是否尝试过以下方式

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

或者

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

答案 2 :(得分:0)

您可以将此类用于接受子附加的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);
                }
            }
        }
    }