如何使用PHP的DOMDocument
或DOMDocumentFragment
向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
。
$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的时候,也不是每件事对我来说都是一分钟就能明白的。这花了我一点时间,除非我能熟练地使用它。