2012-09-22 31 views
22

tôi phải đọc một tập tin XML từ một URLlàm thế nào để đọc file xml từ url bằng php

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

này mang lại cho tôi một URL như:

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

tôi đang sử dụng chức năng này để đọc và sau đó nhận dữ liệu:

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

Nhưng không may mắn, có sự giúp đỡ nào không?

Trả lời

1

Nó làm việc cho tôi. Tôi nghĩ bạn có thể cần phải sử dụng urlencode() trên mỗi thành phần của $map_url.

13

bạn có thể lấy dữ liệu từ XML bằng cách sử dụng hàm "simplexml_load_file". Vui lòng tham khảo liên kết này

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); 
+0

vâng tôi đã cố gắng simplexml_load_file nhưng khi tôi print_r sau đó nó mang lại cho tôi trống trang –

+0

Hãy chắc chắn rằng bạn đã bật allow_url_fopen trong php.ini của bạn –

+0

i kiểm tra allow_url_fopen trên –

13

Mã của bạn dường như phải, kiểm tra xem bạn có fopen wrappers kích hoạt (allow_url_fopen = On trên php.ini)

Ngoài ra, như đã đề cập bởi câu trả lời khác, bạn nên cung cấp một URI được mã hóa đúng cách hoặc mã hóa nó bằng chức năng urlencode(). Bạn cũng nên kiểm tra nếu có bất kỳ lỗi khi tìm nạp chuỗi XML và nếu có bất kỳ lỗi phân tích cú pháp, mà bạn có thể sử dụng đầu ra libxml_get_errors() như sau:

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

Nếu vấn đề là bạn không thể lấy mã XML có lẽ đó là vì bạn cần phải bao gồm một số tiêu đề tùy chỉnh trong yêu cầu của bạn, kiểm tra làm thế nào để sử dụng stream_context_create() để tạo ra một dòng bối cảnh tùy chỉnh để sử dụng khi gọi file_get_contents() trên ví dụ 4 tại http://php.net/manual/en/function.file-get-contents.php

+0

allow_url_fopen là trên –

+0

khi tôi sử dụng đoạn mã trên đưa cái này "Lỗi nạp XML \ n "chỉ không có bất kỳ tin nhắn nào khác –

+0

thì vấn đề phải bằng' file_get_contents ($ map_url) '. Nếu URI của bạn là hợp lệ và allow_url_fopen là On nó có thể là bạn cần cung cấp một bối cảnh tùy chỉnh khi gọi hàm ... – NotGaeL

4

file_get_contents thường có vấn đề về phép. Để tránh chúng, sử dụng:

function get_xml_from_url($url){ 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 

    $xmlstr = curl_exec($ch); 
    curl_close($ch); 

    return $xmlstr; 
} 

Ví dụ:

$xmlstr = get_xml_from_url('http://www.camara.gov.br/SitCamaraWS/Deputados.asmx/ObterDeputados'); 
$xmlobj = new SimpleXMLElement($xmlstr); 
$xmlobj = (array)$xmlobj;//optional 
0

$url = 'http://www.example.com'; $xml = simpleXML_load_file($url,"SimpleXMLElement",LIBXML_NOCDATA);

$ url có thể tập tin php, miễn là các tập tin tạo ra định dạng xml dữ liệu như đầu ra.

Các vấn đề liên quan