bugfix> php > 投稿

以下のように、プリロードされたルート要素に子要素を追加しようとしています

   $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/>

回答 1 件
  • のルート要素の子を反復処理しています $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();
    
    

あなたの答え