PHPでDOM(Document Object Model)を使用すると、文法的に正しい構造のXMLを、比較的容易に作成することができます。
XMLファイルの書き込みサンプル
makeXML.php
<?php // 元データ // 親ノードID(くっつき先)と子ノードID(自分)を含む // 順番は問わない // 木構造 // contents─1┬2─3 // └4─5 $data = array( array( 'parentId' => '', 'childId' => '1', 'comment' => 'comment1', ), array( 'parentId' => '1', 'childId' => '2', 'comment' => 'comment1-1', ), array( 'parentId' => '4', 'childId' => '5', 'comment' => 'comment1-2-1', ), array( 'parentId' => '1', 'childId' => '4', 'comment' => 'comment1-2', ), array( 'parentId' => '2', 'childId' => '3', 'comment' => 'comment1-1-1', ), ); // 出力ファイル名 $fileName = 'comment.xml'; // DOMオブジェクト作成 $dom = new DomDocument('1.0'); $dom->encoding = "UTF-8"; // 出力XMLを改行 $dom->formatOutput = true; // XML作成 $contents = $dom->appendChild($dom->createElement('contents')); // 子ノードを追加 foreach($data as $array){ $parentId = $array['parentId']; $childId = $array['childId']; // parentIdが無い場合contentsに付加 if(empty($parentId)){ $parentId = 'contents'; } // 親ノードが無い場合 if(empty($parentId)){ $parentId = $dom->createElement('content'); } // 子ノードが無い場合 if(empty($childId)){ $childId = $dom->createElement('content'); } // 子ノードを付加 $parentId->appendChild($childId); // 属性値を付加 $childId->setAttribute('id', $childId); $childId->setAttribute('comment', $array['comment']); } //XMLを出力 file_put_contents($fileName, $dom->saveXML()); ?>
実行例
$ php makeXML.php $ cat comment.xml <?xml version="1.0" encoding="UTF-8"?> <contents> <content id="1" comment="comment1"> <content id="2" comment="comment1-1"> <content id="3" comment="comment1-1-1"/> </content> <content id="4" comment="comment1-2"> <content id="5" comment="comment1-2-1"/> </content> </content> </contents>
DOMの他の使い方は、DOMのリファレンス を参照してください。
Comments