0

親要素を取得しようとしていますが、XML タグだと思います。基本的に、複数の<HotelRoomResponse>結果を調べて、この正確な数値を持つ子タグを含むこの親タグを見つける 必要があります。これ<roomTypeCode>17918</roomTypeCode>を行う方法や最善の方法がわかりません。その特定の .xml 内のすべての情報を取得する必要があるためです<HotelRoomResponse>。XML 応答の例を次に示します。

<HotelRoomResponse>
    <cancellationPolicy> </cancellationPolicy>
    <rateCode>200482409</rateCode>
    <roomTypeCode>17918</roomTypeCode>
    <rateDescription>
       Deluxe Sunset View - All Inclusive-Up to $300Resort Credit
    </rateDescription>
    <roomTypeDescription>
       Deluxe Sunset View - All Inclusive-Up to $300Resort Credit
    </roomTypeDescription>
    <supplierType>E</supplierType>
</HotelRoomResponse>

したがって、これらの結果の種類にはさまざまなものがあり、ループしてこの特定のものを見つける必要があります。

XMLに接続する方法は次のとおりです。

$ch = curl_init(); 
$fp = fopen('room_request.xml','w'); 
curl_setopt($ch, CURLOPT_URL, "http://api.ean.com/ean-services/rs/hotel/v3/avail?cid=55505&minorRev=13&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=<HotelRoomAvailabilityRequest><hotelId>".$hid."</hotelId><arrivalDate>05/14/2012</arrivalDate><departureDate>05/18/2012</departureDate><RoomGroup><Room><numberOfAdults>3</numberOfAdults><numberOfChildren>0</numberOfChildren><childAges>0</childAges></Room></RoomGroup><includeDetails>true</includeDetails></HotelRoomAvailabilityRequest>");  
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 
$avail = simplexml_load_file('room_request.xml');

どんなアイデアでも大歓迎です。

4

3 に答える 3

0
$xml = new SimpleXMLElement('room_request.xml');

/* Search for <HotelRoomResponse><roomTypeCode> */
$result = $xml->xpath('/HotelRoomResponse/roomTypeCode');

結果にはノードのリストが表示され、必要に応じて親ノードを確認して取得できます

ここを参照してくださいhttp://www.php.net/manual/en/simplexmlelement.xpath.php

編集2.キーは名前空間でした

   <?php
$ch = curl_init(); 
$fp = fopen('room_request.xml','w'); 
curl_setopt($ch, CURLOPT_URL, "http://travellinginmexico.com/test/room_request.xml");  
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

$xml = new SimpleXMLElement(file_get_contents('room_request.xml'));

/* Search for <HotelRoomResponse><roomTypeCode> */
$xml->registerXPathNamespace('ns2', 'http://v3.hotel.wsapi.ean.com/');
$result = $xml->xpath("HotelRoomResponse[child::roomTypeCode[text() = '153725']]");
foreach($result as $obj=>$node)
{
    var_dump($node->roomTypeCode);
}

送信した例では、特定の情報を取得します

于 2012-04-08T15:28:20.753 に答える
0

わかりました!これは、テキスト=値でノードを取得するために使用したものです。次に、すべての兄弟要素を取得しました。

// load as file
$contents = new SimpleXMLElement($source,null,true);
$result = $contents->xpath('HotelRoomResponse[roomTypeCode="17918"]');

foreach($result as $key=>$node)
{
  $cancelPolicy = $node->cancellationPolicy;
}
于 2012-04-08T16:57:54.027 に答える
0

値を持つ子ノードHotelRoomResponseを持つすべてのノードを検索するには、次を使用します。roomTypeCode'17918'

$match = $avail->xpath("/HotelRoomResponse[child::roomTypeCode[text() = '17918']]");

編集: $match は、すべての一致を保持する配列になります。

于 2012-04-08T15:46:34.960 に答える