XMLが何なのかについては未だにさっぱりわかりませんが、PHPにおいてのXMLの役割ははっきりしていて、まあ要するに単なるタグ付きのテキストです。
XMLを利用したXML-RPCというサービスがあり、これはXML文書をHTTPで送りつけることによって$_REQUESTより複雑な内容を送受信したりするサービスのことです。
そんなわけでXML-RPCのようなサービスにXML文書を送りつけたり、逆に送りつけられたXML文書を解析したりするのがPHPでのXMLの主な使い方になるでしょう。
特に意味はありませんがXML-RPCサービスでググると一番に出てくる郵便番号チェックを行うクライアントを作ってみましょう。
http://yubin.senmon.net/service/xmlrpc/
yuubin.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
//XML
$yuubin_xml='
<methodCall>
<methodName>yubin.fetchAddressByPostcode</methodName>
<params>
<param>
<value><string>1000002</string></value>
</param>
</params>
</methodCall>
';
//URL
$yuubin_href='http://yubin.senmon.net:80/service/xmlrpc/';
//HTTPリクエスト作成
$yuubin_context = stream_context_create(
array(
'http' => array(
'method' => "POST",
'header' => "Content-Type: text/xml",
'content' => $yuubin_xml)
)
);
//XML-RPC
$ret=file_get_contents($yuubin_href, false, $yuubin_context);
print("<pre>");var_dump($ret);die();
|
あっさり成功。
簡単すぎるだろ。
レスポンスは同様にXMLで返ってきますので、こちらを解析してみましょう。
XMLツールとしては、DOM、SAX、SimpleXML、XMLReader、XSLT等々がありますがどれ使えばいいんだよってかどう違うんだこれ。
http://jp2.php.net/manual/ja/refs.xml.php
最も簡単なのはsimplexml_load_stringで、XMLをそのまま突っ込むだけで配列になります。
http://jp2.php.net/manual/ja/function.simplexml-load-string.php
ここではXMLパース目的としては一番簡単とされているSimpleXMLを用いてパースしてみます。
リクエスト用XMLはxmlrpc_encode_requestを用いれば面倒なタグを書く必要はありません。
http://jp2.php.net/manual/ja/function.xmlrpc-encode-request.php
yuubin2.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
//XML
$yuubin_xml_method='yubin.fetchAddressByPostcode';
$yuubin_xml_params=array('1000002');
$yuubin_xml=xmlrpc_encode_request($yuubin_xml_method,$yuubin_xml_params);
//URL
$yuubin_href='http://yubin.senmon.net:80/service/xmlrpc/';
//HTTPリクエスト作成
$yuubin_context = stream_context_create(
array(
'http' => array(
'method' => "POST",
'header' => "Content-Type: text/xml",
'content' => $yuubin_xml)
)
);
//XML-RPC
$yuubin_request=file_get_contents($yuubin_href, false, $yuubin_context);
//SimpleXMLElement
$yuubin_sxml=new SimpleXMLElement($yuubin_request);
//XMLの一部を抽出
foreach(
$yuubin_sxml
->params
->param
->value
->array
->data
->value
->struct
->member
as $yuubin_sxml_val){
print($yuubin_sxml_val->name.':'
.$yuubin_sxml_val->value->children()."<br>\n");
}
|
あとは郵便番号を引数にして関数化したり、他のメソッドも実装してクラス化したりするとよいかもしれません。
あと先方でも指摘されているエラー処理も忘れずに。
それにしても->のところはもうちょっとどうにかならないのだろうか。
PR
トラックバック
トラックバックURL: