PHPでxmlを簡単に扱う(PHP Advent Calendar jp 2010 Day 5)

NO IMAGE

はじめましてPHP Advent Calendar jp 2010 : ATNDの4日目参戦のredsnowです。
お仕事でXMLを扱う必要があったのですが、なかなかに苦労したのでネタにしてみます。

XMLを作成する時

PEAR XML_Serializer
今更PEAR?って思われるかもしれませんが、pear installしないで自分の環境におけるのでたまに使います。
かつ、標準関数でやるとxml作成は結構大変なのでオススメです

 array(
        'user'      => array(
            'first_name'    => '波平',
            'last_name'     => '磯野',
            'email'         => array(
                'pc'        => '[email protected]',
                'mobile'    => '',
            ),
        ),
    )
);

$options = 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         => 'request',
);

$serializer = new XML_Serializer($options);
$serializer->serialize($data);
$xml        = $serializer->getSerializedData();

生成されるxml

 
 
	 
		 
			波平 
			磯野 
			 
				[email protected] 
				 
			 
		 
	 

POSTする時

file_get_contents、stream_context_create、http_build_queryを使うと幸せですね

 $xml), "", "&");

$headers = array(
    'Content-Type: application/x-www-form-urlencoded',
    'Authorization: Basic '.base64_encode('id:password'),//ベーシック認証
);

$context = stream_context_create(array('http' => array(
    'method'    => "POST",
    'content'   => $postdata,
    'header'    => implode("\r\n", $headers),
)));

$content    = @file_get_contents($url, false, $context);

ベーシック認証がかかっているサイトにPOSTしてます。
file_get_contents万能すぎですね(*´Д`*)

XMLを配列にしたい時

PEAR XML_Unserializer
simplexml_load_stringを使えばいいじゃんという声が聞こえてきそうですが・・・

setOption('parseAttributes', TRUE);
$status         = $Unserializer->unserialize($content);

if ($status === true) {
    $res_array = $Unserializer->getUnserializedData();
    print_r($res_array); // 結果の配列
} else {
    print_r($status->message); // エラーメッセージ
}

枯れた技術のオンパレードでしたがいかがでしょうか?
もっとこうした方がいいよ!って教えていただけるとありがたいです
それでは、明日は忍び歩く男 – SLYWALKERです、よろしくお願いします!