phpでxml関連のライブラリーは結構ありますが、一番手軽なのはPEARのXML_Serializerだと思います。
※Cakeとか、フルスッタクのフレームワークに入ってるxmlのコンポーネントがある場合はそちらのほうが手軽です。
目次
- XML_Serializerインストール
- XMLの出力
- XMLの受け取り
XML_Serializerインストール
PEARでインストール
pear install XML_Serializer
手動でインストール
からライブラリーをダウンロード、解凍して、適当な場所に保存する。
XML_Util、XML_Parserと依存しているので、合わせてダウンロードしてインストールしておく。
※PEARはインストール済みを想定。されてない場合は、インストールする必要がある。
XMLの出力
require_once 'XML/Serializer.php';
$data = array('aaa' => 'bbb', 'ccc' => 'ddd');
$options = array(
"indent" => " ",
"linebreak" => "\n",
"typeHints" => false,
"addDecl" => true,
"encoding" => "EUC-JP",
"rootName" => "result",
"defaultTagName" => "item",
);
$serializer = new XML_Serializer($options);
$status = $serializer->serialize($data);
if( $status === true ) {
$xml = $serializer->getSerializedData();
header ("Content-Type: text/xml; charset=EUC-JP");
echo $xml;
exit;
}
exit;
文字コードはEUC-JPに指定しています。
XMLの受け取り
require_once 'XML/Unserializer.php';
$header = array(
"User-Agent: ".$_SERVER["HTTP_USER_AGENT"]
);
$options = array(
"http" => array(
"method" => "GET",
"content" => http_build_query(array()),
"header" => implode("\r\n", $header)
)
);
$api_uri = 'http://example.com/'; // xmlを出力するURL
$xml = file_get_contents($api_uri, false, stream_context_create($options));
$obj = new XML_Unserializer();
$obj->setOption("parseAttributes", true);
$status = $obj->unserialize($xml);
if ($status === true) {
$xml_data = $obj->getUnserializedData();
mb_convert_variables('EUC-JP', 'UTF-8', $xml_data);
print_r($xml_data['item']);
}
exit;
こんな感じで、xmlを読み込むことができます。
オプションは
が参考になります。
ちなみに、file_get_contentsでGETでパラメータ付きリクエスト送りたい場合は、
file_get_contents() で GET リクエストを送る場合の値は URL に持たせる | ウェブル.
xmlを出力する方でBASIC認証を指定したい場合もあると思いますが、file_get_contentsではBASIC認証されたディレクトリのファイルも取得できます。
$header = array(
"Authorization: Basic ".base64_encode("User:Pass"),
"User-Agent: ".$_SERVER["HTTP_USER_AGENT"]
);
