2012-01-01 15 views
11

Sto tentando di utilizzare SimpleXML per caricare un URL remoto.Utilizzo di SimpleXML per caricare l'URL remoto

Se inserisco nel mio browser quanto segue;

http://api.ean.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=12&apiKey=2hkhej72gxyas3ky6hhjtsga&locale=en_US&currencyCode=USD&customerIpAddress=10.184.2.9&customerUserAgent=Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.25)+Gecko/20111212+Firefox/3.6.25&customerSessionId=&xml=<HotelListRequest><arrivalDate>01/22/2012</arrivalDate><departureDate>01/24/2012</departureDate><RoomGroup><Room><numberOfAdults>1</numberOfAdults><numberOfChildren>1</numberOfChildren><childAges>4</childAges></Room></RoomGroup><city>Amsterdam</city><countryCode>NL</countryCode><supplierCacheTolerance>MED</supplierCacheTolerance></HotelListRequest> 

Funziona!

Se ci provo;

$url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=12&apiKey=2hkhej72gxyas3ky6hhjtsga&locale=en_US&currencyCode=USD&customerIpAddress=10.184.2.9&customerUserAgent=Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.25)+Gecko/20111212+Firefox/3.6.25&customerSessionId=&xml=<HotelListRequest><arrivalDate>01/22/2012</arrivalDate><departureDate>01/24/2012</departureDate><RoomGroup><Room><numberOfAdults>1</numberOfAdults><numberOfChildren>1</numberOfChildren><childAges>4</childAges></Room></RoomGroup><city>Amsterdam</city><countryCode>NL</countryCode><supplierCacheTolerance>MED</supplierCacheTolerance></HotelListRequest> '; 
$xml = simplexml_load_file($url); 

Ho ricevuto il seguente errore;

Warning: simplexml_load_file() [function.simplexml-load-file]: http://api.ean.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=12&apiKey=2hkhej72gxyas3ky6hhjtsga&locale=en_US&currencyCode=USD&customerIpAddress=10.184.2.9&customerUserAgent=Mozilla/5.0%2B(Windows;%2BU;%2BWindows%2BNT%2B6.1;%2Ben-US;%2Brv:1.9.2.25)%2BGecko/20111212%2BFirefox/3.6.25&customerSessionId=&xml=%3CHotelListRequest%3E%3CarrivalDate%3E01/22/2012%3C/arrivalDate%3E%3CdepartureDate%3E01/24/2012%3C/departureDate%3E%3CRoomGroup%3E%3CRoom%3E%3CnumberOfAdults%3E1%3C/numberOfAdults%3E%3CnumberOfChildren%3E1%3C/numberOfChildren%3E%3CchildAges%3E4%3C/childAges%3E%3C/Room%3E%3C/RoomGroup%3E%3Ccity%3EAmsterdam%3C/city%3E%3CcountryCode%3ENL%3C/countryCode%3E%3CsupplierCacheTolerance%3EMED%3C/supplierCacheTolerance%3E%3C/HotelListRequest%3E%20:1: parser error : Start tag expected, '<' not found in C:\Program Files\XAMPP\xampplite\htdocs\hotel\results.php on line 29 

La parte più notevole di tale errore è: Errore parser: Tag di inizio previsto, '<' non trovato

vorrei accedere a quel file e utilizzare PHP/SimpleXML per formattare i risultati - ma finora sono bloccato.

Ho pensato che questo thread HERE che parla di rawurlencode potrebbe aver aiutato ma non lo ha fatto, o quello o mi manca qualcosa.

risposta

30

I risultati stanno tornando come json. Sostituire simplexml_load_file con json_decode e verrà visualizzato un oggetto appropriato.

Se si desidera utilizzare xml, è necessario specificarlo nelle intestazioni. Il seguente codice restituirà valida xml:

$context = stream_context_create(array('http' => array('header' => 'Accept: application/xml'))); 
$url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=12&apiKey=2hkhej72gxyas3ky6hhjtsga&locale=en_US&currencyCode=USD&customerIpAddress=10.184.2.9&customerSessionId=&xml=<HotelListRequest><arrivalDate>01/22/2012</arrivalDate><departureDate>01/24/2012</departureDate><RoomGroup><Room><numberOfAdults>1</numberOfAdults><numberOfChildren>1</numberOfChildren><childAges>4</childAges></Room></RoomGroup><city>Amsterdam</city><countryCode>NL</countryCode><supplierCacheTolerance>MED</supplierCacheTolerance></HotelListRequest> '; 

$xml = file_get_contents($url, false, $context); 
$xml = simplexml_load_string($xml); 
print_r($xml); 
?> 
+0

Grazie che sembra tornare la matrice, ma puoi dirmi di cosa si tratta l'URL che lo rende JSON come sembra XML per me e anche quello che sarebbe un esempio di lavorare con i dati che vengono restituiti da quanto sopra; ad esempio echo $ xml-> hotelId [1]; o qualcosa di simile? Grazie per l'aiuto. – Wordpressing

+1

L'url non specifica la codifica - è l'intestazione Accept che la dose. Il tuo esempio è praticamente sulla traccia destra, ma dovresti usare una domanda separata per la parte dell'oggetto $ XML. Per favore non dimenticarti di accettare! – Mbrevda

+0

Ok, questo ha più senso per me ora, grazie per il tuo aiuto! – Wordpressing

Problemi correlati