繁体   English   中英

XML通过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>

我要向父<level name="menu1">追加一个新的子级,如下所示: <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时,对我来说一分钟内并不是所有事情都变得如此清晰。 除非我能流利地花了一段时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM