phpでxmlを出力して受け取る方法

  • このエントリーをはてなブックマークに追加

phpでxml関連のライブラリーは結構ありますが、一番手軽なのはPEARのXML_Serializerだと思います。
※Cakeとか、フルスッタクのフレームワークに入ってるxmlのコンポーネントがある場合はそちらのほうが手軽です。

目次

  • XML_Serializerインストール
  • XMLの出力
  • XMLの受け取り

XML_Serializerインストール

PEARでインストール

pear install XML_Serializer

手動でインストール

XML_Serializer.

からライブラリーをダウンロード、解凍して、適当な場所に保存する。

XML_UtilXML_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を読み込むことができます。
オプションは

XML_Unserializer Options.

が参考になります。
ちなみに、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"]
);
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

ads

コメントを残す

*