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です、よろしくお願いします!