2012-03-16 11 views
3

私はエクスペディアからXMLフィードを取得し、画面上にそれを解析しようとしていますこんにちは。それはデータを返すわけではないので、なぜ私は理解できません。返されるのはactivePropertyCountだけです。あなたが見てみたい場合はここで私はこれをやっているURLは次のとおりです。http://travellinginmexico.com/test/index.php、ここでは、私が解析しようとしているxmlです:http://travellinginmexico.com/test/data.xmlPHPの読んでいないXMLデータ

マイコード:

<?php 
$post_string = 'type=xml&cid=55505&minorRev=5&apiKey=4sr8d8bsn75tpcuja6ypx5g3&locale=en_US&currencyCode=USD&customerIpAddress=10.184.2.9&customerUserAgent=Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/535.11+(KHTML,+like+Gecko)+Chrome/17.0.963.79+Safari/535.11&customerSessionId=&xml=<HotelListRequest><arrivalDate>04/05/2012</arrivalDate><departureDate>04/07/2012</departureDate><RoomGroup><Room><numberOfAdults>2</numberOfAdults></Room><Room><numberOfAdults>2</numberOfAdults><numberOfChildren></numberOfChildren></Room></RoomGroup><city>Cancun</city><countryCode>MX</countryCode><supplierCacheTolerance>MED_ENHANCED</supplierCacheTolerance></HotelListRequest> '; 
$path = "http://api.ean.com/ean-services/rs/hotel/v3/list"; //Relative path to the file with $_POST parsing 
$ch = curl_init($path); 
$fp = fopen('data.xml','w'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); //Send the data to the file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/xml')); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
$val = curl_exec($ch); 
curl_close($ch);//Close curl session 
fclose($fp); //Close file overwrite 

$data = simplexml_load_file('data.xml'); 
    echo "<ul id=\"data\">\n"; 
    foreach ($data as $info): 
     $title=$info->HotelList; 
     $add=$info->address1; 
     $count=$info['activePropertyCount']; 
     echo "<li><div class=\"title\">",$title,"</div><div class=\"artist\">by ",$add,"</div><time>",$count,"</time></li>\n"; 
    endforeach; 
    echo "</ul>"; 

?> 
+1

解析する前に実際にXML文字列が '$ val'で取得されていることを確認しましたか? – MrCode

+0

Expedia XML関連:[411 Lengthを修正するにはfile_get_contentsとexpedia XML APIで必要なエラー?](http://stackoverflow.com/q/9412650/367456)レスポンスコード、書き込まれたバイトなどのチェックをよくする:[外部リンクからサーバーにリモートでファイルをダウンロードする - ダウンロードが途中で停止する](http://stackoverflow.com/q/9730285/367456) – hakre

答えて

1

XMLオブジェクトの正しい部分からデータを取得しようとしていないようです。 HotelList-> HotelSummaryセクションから読み込むようにコードを更新しました。ホテル名と住所が正しく表示されます。

//Use Curl to get XML here. 

$data = simplexml_load_file('data.xml'); 

//Uncomment this to view the parsed XML on screen. 
/* 
echo '<pre>'; 
print_r($data->HotelList); 
echo '</pre>'; 
*/ 

echo "<ul id=\"data\">\n"; 
foreach($data->HotelList->HotelSummary as $info): 
    $title=$info->name; 
    $add=$info->address1; 
    $count=$data->HotelList['activePropertyCount']; 
    echo "<li><div class=\"title\">",$title,"</div><div class=\"artist\">by ",$add,"</div><time>",$count,"</time></li>\n"; 
endforeach; 
echo "</ul>"; 
+0

あなたは魅力的なこの素晴らしい仕事です。どうもありがとうございます! – liveandream

0

私はチェックアウトをお勧めしますlibxml_get_errors 。関数のPHPドキュメントでそれを使用する方法については、かなり良い例があります。 simplexml_load_fileの間に発生している問題を教えてください。

問題がcURLから発生している(またはもう少し徹底する)と思われる場合は、cURLエラー関数も使用できます。 (例えば、curl_errorなど)。