はじめまして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
~~~
~~~
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です、よろしくお願いします!
コメント