用PHP DOMDocument为父节点插入新的子节点


XML insert new child for parent with PHP DOMDocument

如何使用PHP的DOMDocumentDOMDocumentFragment向XML文件添加如下结构。

<root>
    <level name="menu1"> 
          <level name="menu1.1"><content name="menu1.1" /></level>
          <level name="menu1.2"><content name="menu1.2" /></level>
          <level name="sub-menu1">
               <level name="sub-menu1.1"><content name="sub-menu1.2"/></level>
          </level>
    </level>
    <level name="menu2"> <!-- Omitted --> 
    </level>
</root>

我想给parent: <level name="menu1">添加一个新的子节点,如下所示。

<level name="menu1.3"><content name="menu1.3" /></level>
到目前为止,我已经能够完全使用 构造子节点了。
$new_dom = new DOMDocument;
$new_level_node = $new_dom->createElement('level');
$new_level_node->setAttribute('name','menu1.3');             
$new_content_node = $new_dom->createElement('content');
$new_content_node->setAttribute('name','menu1.3'); 
$new_level_node->appendChild($new_content_node); 

但是我现在如何将$new_level_node添加到上面的主要XML

对于主XML,我使用: 将其读入内存
$doc = new DOMDocument;
$doc->loadxml( $main_xml );

恕我直言,文档非常清楚,但是如果您是新手,则需要一些耐心和头脑。这些属性对于一名优秀的程序员(以及想成为一名优秀程序员的人)来说是必不可少的。不要总是责怪文档!

然而,我将给出一个例子:

$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
// Prettify saveXML()
$doc->formatOutput = true;
$doc->load('main.xml');
// Create the child. You don't need to create a new DOMDocument for that
$new_level_node = $doc->createElement('level');
$new_level_node->setAttribute('name','menu1.3');
$new_content_node = $doc->createElement('content');
$new_content_node->setAttribute('name','menu1.3');
$new_level_node->appendChild($new_content_node);
// Now we need to select the menu1 node, in order to call
// appendChild on it. I suggest to use XPath for that.
$xpath_selector = new DOMXPath($doc);
$menu1 = $xpath_selector
    ->query('//level[@name="menu1"]')
    ->item(0);
// Append the new node now
$menu1->appendChild($new_level_node);
// Output the modified document
echo $doc->saveXML();

让我补充一下,当我开始学习XML的时候,也不是每件事对我来说都是一分钟就能明白的。这花了我一点时间,除非我能熟练地使用它。