pearのXML_SerializerをsimpleXMLっぽく使う

<?php

require_once("XML/Serializer.php");
header("Content-Type: text/xml; charset=utf-8");

$xml = array("item" => array("hoge","hoge","hoge"));
//これがXMLにしたい配列だよ

$param = array(
   XML_SERIALIZER_OPTION_INDENT => "\t",
   XML_SERIALIZER_OPTION_XML_ENCODING => 'UTF-8',
   XML_SERIALIZER_OPTION_XML_DECL_ENABLED => TRUE,
   XML_SERIALIZER_OPTION_ROOT_NAME => 'xml', 
   XML_SERIALIZER_OPTION_ROOT_ATTRIBS =>
     array('version' => '2.0','encoding' => 'UTF-8'), 
);
//いろんなオプションがあるんだ
    
$serializer = new XML_Serializer($param);
$serializer->serialize($this->xml);
echo $serializer->getSerializedData();

?>
  • とすると
<xml encoding="UTF-8" version="2.0"> 
	<item>hoge</item>
	<item>hoge</item>
	<item>hoge</item>
</xml>
  • っていうXMLを表示してくれる…とおもったら違った
<xml encoding="UTF-8" version="2.0"> 
	<item> 
		<XML_Serializer_Tag>hoge</XML_Serializer_Tag> 
		<XML_Serializer_Tag>hoge</XML_Serializer_Tag> 
		<XML_Serializer_Tag>hoge</XML_Serializer_Tag> 
	</item> 
</xml>
  • なんだこのXML_Serializer_Tagって
  • 調べてみると連想配列じゃない普通の配列はデフォルトでこういう名前のタグに変換されるみたい
  • よけいなおせわだ
XML_SERIALIZER_OPTION_DEFAULT_TAG => 'fuga',
  • この一行を$paramの中に加えれば名前は変えられるけどスマートじゃないね
  • serialize();するまえに
$serializer->setOption('mode','simplexml');
  • この1行を入れてみると
<xml encoding="UTF-8" version="2.0"> 
	<item>hoge</item> 
	<item>hoge</item> 
	<item>hoge</item> 
</xml>
  • ちゃんと返してくれるようになった。やったね!
  • XML_Serializerちょうべんり

*1:ほんとはオブジェクトでも大丈夫