Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to read xml file from url using php

Tags:

url

php

xml

I have to read an XML file from an URL

$map_url = "http://maps.google.com/maps/api/directions/xml?origin=".$merchant_address_url."&destination=".$customer_address_url."&sensor=false"; 

This gives me an URL like:

http://maps.google.com/maps/api/directions/xml?origin=Quentin+Road+Brooklyn%2C+New+York%2C+11234+United+States&destination=550+Madison+Avenue+New+York%2C+New+York%2C+10001+United+States&sensor=false

I am using this function to read and then get data:

 $response_xml_data = file_get_contents($map_url);  if($response_xml_data){      echo "read";  }   $data = simplexml_load_string($response_xml_data);  echo "<pre>"; print_r($data); exit;  

But no luck, any help?

like image 257
Asif hhh Avatar asked Sep 22 '12 09:09

Asif hhh


People also ask

How to read xml from url in php?

Show activity on this post. $url = 'http://www.example.com'; $xml = simpleXML_load_file($url,"SimpleXMLElement",LIBXML_NOCDATA); $url can be php file, as long as the file generate xml format data as output. Show activity on this post.


2 Answers

you can get the data from the XML by using "simplexml_load_file" Function. Please refer this link

http://php.net/manual/en/function.simplexml-load-file.php

$url = "http://maps.google.com/maps/api/directions/xml?origin=Quentin+Road+Brooklyn%2C+New+York%2C+11234+United+States&destination=550+Madison+Avenue+New+York%2C+New+York%2C+10001+United+States&sensor=false"; $xml = simplexml_load_file($url); print_r($xml); 
like image 172
Prasath Albert Avatar answered Sep 20 '22 03:09

Prasath Albert


Your code seems right, check if you have fopen wrappers enabled (allow_url_fopen = On on php.ini)

Also, as mentioned by other answers, you should provide a properly encoded URI or encode it using urlencode() function. You should also check if there is any error fetching the XML string and if there is any parsing error, which you can output using libxml_get_errors() as follows:

<?php if (($response_xml_data = file_get_contents($map_url))===false){     echo "Error fetching XML\n"; } else {    libxml_use_internal_errors(true);    $data = simplexml_load_string($response_xml_data);    if (!$data) {        echo "Error loading XML\n";        foreach(libxml_get_errors() as $error) {            echo "\t", $error->message;        }    } else {       print_r($data);    } } ?> 

If the problem is you can't fetch the XML code maybe it's because you need to include some custom headers in your request, check how to use stream_context_create() to create a custom stream context for use when calling file_get_contents() on example 4 at http://php.net/manual/en/function.file-get-contents.php

like image 30
NotGaeL Avatar answered Sep 23 '22 03:09

NotGaeL