2012-04-08 6 views
0

Ich versuche, das Elternelement zu bekommen, ich denke an ein XML-Tag. Grundsätzlich muss ich mehrere <HotelRoomResponse> Ergebnisse durchlaufen und finde dieses Eltern-Tag, das ein Kind-Tag mit diesem genauen Zahlenwert enthält: <roomTypeCode>17918</roomTypeCode> Ich bin mir nicht sicher, wie man das macht oder was der beste Weg wäre. Weil ich dann ALLE Informationen in diesem spezifischen <HotelRoomResponse> bekommen muss. Hier ist ein Beispiel XML-Antwort:Erhalte Eltern-Index in XML und PHP?

<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> 

So gibt es verschiedene dieser Ergebnistypen und ich muss durch sie Schleife und finden diese spezifischen.

Hier ist, wie ich in die XML-anschließe:

$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'); 

Alle Ideen sind willkommen.

+0

Sie sollten Ihren API-Schlüssel neu generieren. – Till

Antwort

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

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

Ergebnis wird Ihnen eine Liste von Knoten können Sie dann den übergeordneten Knoten überprüfen und erhalten ggf.

hier sehen http://www.php.net/manual/en/simplexmlelement.xpath.php

bearbeiten 2. Taste, um den Namensraum war

<?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); 
} 

Mit dem von Ihnen gesendeten Beispiel erhalten Sie spezifische Informationen

+0

das hat nicht funktioniert, es gab mir ein leeres Array zurück? – liveandream

+0

sorry Variablenname freundlicherweise bearbeitet und ich setze einen Schrägstrich vor HotelRoomResponse –

+0

immer noch nichts .. leere Array. – liveandream

0

Um alle HotelRoomResponse Knoten zu finden, die ein roomTypeCode Kind-Knoten mit dem Wert '17918', verwenden Sie die folgende hat:

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

EDIT: $ Spiel wird ein Array, das alle Spiele.

+0

Auch nicht funktioniert, gab mir ein Array von 0 .. meinst du, du könntest Gib mir ein bisschen mehr von einem Beispiel? Ich habe versucht, es in eine foreach-Schleife zu legen und nichts. Ich bin mir nicht sicher, was hier passiert. Vielen Dank! – liveandream

0

Ok, habe es herausgefunden !!!! Hier ist, was ich verwendet habe, um einen Knoten mit text = value zu bekommen. Dann habe ich alle Geschwisterelemente.

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

foreach($result as $key=>$node) 
{ 
    $cancelPolicy = $node->cancellationPolicy; 
}