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"] );