簡體   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