[PHP]SimpleXMLでxmlツリーを作成し、綺麗に整形して出力する

PHPでSimpleXMLを使用してxmlの作成を行います。

プログラム

<?php
$rootNode = new SimpleXMLElement( "<?xml version='1.0' encoding='SHIFT_JIS' standalone='yes'?><items></items>" );
 
// ノードの追加
$itemNode = $rootNode->addChild('item');
$itemNode->addChild( 'itemCode', 'mk' );
$itemNode->addChild( 'itemName', 'orange' );
 
$itemNode = $rootNode->addChild('item');
$itemNode->addChild( 'itemCode', 'ap' );
$itemNode->addChild( 'itemName', 'apple' );
 
$itemNode = $rootNode->addChild('item');
$itemNode->addChild( 'itemCode', 'tof' );
$itemNode->addChild( 'itemName', '豆腐' );
 
// ノードに属性を追加
$itemNode->addAttribute('stock', 'none');
 
// 作ったxmlツリーを出力する
echo $rootNode->asXML();



実行結果

<?xml version="1.0" encoding="SHIFT_JIS" standalone="yes"?>
<items><item><itemCode>mk</itemCode><itemName>orange</itemName></item><item><itemCode>ap</itemCode><itemName>apple</itemName></item><item stock="none"><itemCode>tof</itemCode><itemName>豆腐</itemName></item></items>





asXML()でxmlが出力されますが、改行が入らないので人が見たときに可読性に劣ります。
このような場合は、SimpleXMLを利用すると綺麗にインデントされます。

プログラム(最初のプログラムのasXMLを以下のコードに置き換える)

$dom = new DOMDocument( '1.0' );
$dom->loadXML( $rootNode->asXML() );
$dom->formatOutput = true;
echo $dom->saveXML();



実行結果

<?xml version="1.0" encoding="SHIFT_JIS" standalone="yes"?>
<items>
  <item>
    <itemCode>mk</itemCode>
    <itemName>orange</itemName>
  </item>
  <item>
    <itemCode>ap</itemCode>
    <itemName>apple</itemName>
  </item>
  <item stock="none">
    <itemCode>tof</itemCode>
    <itemName>豆腐</itemName>
  </item>
</items>



これでだいぶ見やすくなりました。

関連記事

コメントを残す

メールアドレスが公開されることはありません。