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のリファレンス
を参照してください。
















westerndogの小屋 2009
Comments