[PHP]SimpleXML関数の質問です。

http://api.rakuten.co.jp/rws/1.9/rest?developerId=730902437fc60c8dd801404256346e92&operation=SimpleHotelSearch&version=2007-08-20&latitude=128440.51&longitude=503172.21&searchRadius=1";

上記のURLのXML内の一部を下記に抜粋しています。
------
<Body>
<simpleHotelSearch:SimpleHotelSearch>
<searchRadius>1.0</searchRadius>
<hotel>
<hotelNo>982</hotelNo>
<hotelName>八重洲富士屋ホテル</hotelName>
------
<hotelName>内の「八重洲富士屋ホテル」のデータを変数に格納し、表示したいのです。
children()メソッドも必要であることは理解できていますが、うまくいきません。
ご教授よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/12/12 12:23:25
  • 終了:2007/12/12 17:05:55

回答(1件)

id:tezcello No.1

tezcello回答回数460ベストアンサー獲得回数692007/12/12 13:23:06

ポイント70pt

質問文のURLではエラーになってしまうので、適当につないだもので作ってみました。

ステータスでエラーが入っていますが気にしないという事で...

ひょっとしたら検索結果が複数返るかも知れないと思ったので、デタラメなホテル名を追加して、結果は配列に入れています。

$str = <<< EOL
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<header:Header xmlns:header="http://api.rakuten.co.jp/rws/rest/Header">
<Args>
<Arg key="User-Agent" value="Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)">true</Arg>
<Arg key="developerId" value="730902437fc60c8dd801404256346e92">true</Arg><Arg key="operation" value="SimpleHotelSearch">true</Arg>
<Arg key="version" value="2007-08-20">true</Arg>
<Arg key="latitude" value="128440.51">true</Arg>
<Arg key="longitude" value="503172.21">true</Arg>
<Arg key="searchRadius" value="1";">false</Arg>
</Args>
<Status>ClientError</Status>
<StatusMsg>searchRadiusパラメータが正しくありません。</StatusMsg>
</header:Header>
<Body>
<simpleHotelSearch:SimpleHotelSearch xmlns:simpleHotelSearch ="http://api.rakuten.co.jp/rws/rest/SimpleHotelSearch">
<searchRadius>1.0</searchRadius>
<hotel>
<hotelNo>982</hotelNo>
<hotelName>八重洲富士屋ホテル</hotelName>
</hotel>
<hotel>
<hotelNo>900</hotelNo>
<hotelName>900番ホテル</hotelName>
</hotel>

</simpleHotelSearch:SimpleHotelSearch>
</Body>
</Response>

EOL;

$xml = simplexml_load_string($str);

$result = $xml->xpath('//hotel/hotelName');

foreach ($result as $res){ $hotels[] = (string)$res;}

var_dump($hotels);

結果はこうでした。

array(2) { [0]=>  string(27) "八重洲富士屋ホテル" [1]=>  string(21) "900番ホテル" }

http://www.php.net/manual/ja/ref.simplexml.php

id:makotoworld

質問のURLにミスがありました。

正確に下記の通りです。

http://api.rakuten.co.jp/rws/1.9/rest?developerId=730902437fc60c...

この答えではちゃんと返りません。

確認お願いします。

2007/12/12 14:40:16
  • id:tezcello
    > この答えではちゃんと返りません。
    「ちゃんと」していない所はなんでしょうか?
    何かエラーが返るとかでしょうか?

    当方では問題無く動作しますが...
    因みに、修正後のURLで得られた文字列を $str に代入したところ、以下のようになりました。
    array(21) { [0]=> string(27) "八重洲富士屋ホテル" [1]=> string(27) "センターホテル東京" [2]=> string(63) "ホテル 銀座ラフィナート(NTTグループ)" [3]=> string(18) "丸ノ内ホテル" [4]=> string(54) "カプセル&サウナ ファーストイン京橋" [5]=> string(51) "ホテルモントレ ラ・スール ギンザ" [6]=> string(27) "ホテルモントレ銀座" [7]=> string(33) "神田ステーションホテル" [8]=> string(33) "八重洲ターミナルホテル" [9]=> string(75) "ホテルモントレ ラ・スール ギンザ(日通旅行提供)" [10]=> string(51) "八重洲富士屋ホテル(日通旅行提供)" [11]=> string(9) "浦島館" [12]=> string(18) "パレスホテル" [13]=> string(51) "フォーシーズンズホテル丸の内 東京" [14]=> string(21) "ホテル西洋銀座" [15]=> string(39) "メルキュールホテル銀座東京" [16]=> string(36) "アパホテル<日本橋駅前>" [17]=> string(50) "ウィークリー&マンスリー a1銀座東" [18]=> string(27) "パールホテル八重洲" [19]=> string(33) "京王プレッソイン大手町" [20]=> string(39) "ホテルメトロポリタン丸の内" }
  • id:tezcello
    どのように取り込んでいるのかが分らなかったので、文字列をコピー&ペーストしましたが、
    file_get_contents() で取り込むものでもテストしてみました。

    $str = file_get_contents('http://api.rakuten.co.jp/rws/1.9/rest?developerId=730902437fc60c8dd801404256346e92&operation=SimpleHotelSearch&version=2007-08-20&latitude=128440.51&longitude=503172.21&searchRadius=1');
    $xml = simplexml_load_string($str);
    $result = $xml->xpath('//hotel/hotelName');
    foreach ($result as $res){ $hotels[] = (string)$res;}
    var_dump($hotels);

  • id:makotoworld
    できました!
    心配かけてすみません。
    xpathの使い方参考になりました。
  • id:hiroponta
    Developer IDが表示されているのは、どうにかしたほうがいいですよ。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません