首页 > 解决方案 > PHP DOM 将子元素附加到根

问题描述

我正在尝试将子元素附加到预加载的根元素,如下所示

    $document = new DOMDocument('1.0', 'UTF-8');
    $document->loadXML('<books></books>');


    $content = '<books>
                   <book>
                       <athors>
                           <athor>
                               <name>John Doe</name>
                           </athor>
                       </athors>
                   </book>
               </books>';
     
    $books = new DOMDocument()

    $books->loadXML($content);

    foreach ($books as $book){
        $document->appendChild($document->importNode( $book, true ));
    }

由于某种原因,结果 xml 文档将如下所示,根元素的结束标记位于文档的开头:

   <?xml version="1.0"?>
   <books/>
         <book>
                       <athors>
                           <athor>
                               <name>John Doe</name>
                           </athor>
                       </athors>
          </book>

我希望它如下所示:

   <?xml version="1.0"?>
   <books>
         <book>
                       <athors>
                           <athor>
                               <name>John Doe</name>
                           </athor>
                       </athors>
          </book>
   <books/>

标签: phpxmldom

解决方案


您正在迭代 中的根元素的子元素$books,而不是book元素。然后你追加到的根$document,而不是books元素。

您需要深入每个节点以到达适当的节点。

<?php
$document = new DOMDocument('1.0', 'UTF-8');
$document->loadXML('<books></books>');
$documentBooks = $document->childNodes[0];

$content = '<books>
                   <book>
                       <athors>
                           <athor>
                               <name>John Doe</name>
                           </athor>
                       </athors>
                   </book>
               </books>';
     
$books = new DOMDocument();
$books->loadXML($content);
$bookItems = $books->childNodes[0]->childNodes;

foreach ($bookItems as $book){
    $documentBooks->appendChild($document->importNode( $book, true ));
}
echo $document->saveXML();

推荐阅读