2009-02-18 37 views
30

Tôi đang gọi phương thức PHP cURL trên máy chủ và phản hồi là loại XML. cURL đang lưu đầu ra (sau khi xóa các thẻ) trong một biến kiểu vô hướng. Có cách nào để lưu trữ nó trong một đối tượng/băm/mảng để dễ phân tích cú pháp không?PHP cURL, trích xuất phản hồi XML

+0

Ông có thể mở rộng vào những gì bạn có nghĩa là bởi "sau khi loại bỏ các thẻ". –

Trả lời

96
<?php 
function download_page($path){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$path); 
    curl_setopt($ch, CURLOPT_FAILONERROR,1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 15); 
    $retValue = curl_exec($ch);   
    curl_close($ch); 
    return $retValue; 
} 

$sXML = download_page('http://alanstorm.com/atom'); 
$oXML = new SimpleXMLElement($sXML); 

foreach($oXML->entry as $oEntry){ 
    echo $oEntry->title . "\n"; 
} 
+13

Câu trả lời này vẫn giúp sau 3 năm !! cảm ơn – Vimalnath

+4

Nó vẫn hiện nay !! – JohnnyQ

+5

@Vimal 5 năm, để chính xác hơn – Peon

2

không, CURL không có bất kỳ điều gì với phân tích cú pháp XML, nó không biết bất kỳ điều gì về nội dung được trả lại. nó phục vụ như một proxy để có được nội dung. tùy thuộc vào bạn phải làm gì với nó.

sử dụng JSON nếu có thể (và json_decode) - nó dễ dàng hơn để làm việc với, nếu không thể, sử dụng bất kỳ thư viện XML cho parsin như DOMXML: http://php.net/domxml

+0

Tôi đồng ý với điều đó. Nhưng tại sao các thẻ không được hiển thị. Tôi làm một tiếng vang. Có phải vì trình duyệt không? – Rakesh

+0

có, trình duyệt xử lý XML dưới dạng (X) HTML, vì vậy nếu> hoặc dusoft

+0

Nếu bạn echo htmlentities (...), bạn sẽ thấy toàn bộ XML – Greg

7

Chỉ cần thêm header('Content-type: application/xml'); trước tiếng vang của mình trong những Phản hồi XML và bạn sẽ thấy một trang XML.

2

Ví dụ:

<songs> 
<song dateplayed="2011-07-24 19:40:26"> 
    <title>I left my heart on Europa</title> 
    <artist>Ship of Nomads</artist> 
</song> 
<song dateplayed="2011-07-24 19:27:42"> 
    <title>Oh Ganymede</title> 
    <artist>Beefachanga</artist> 
</song> 
<song dateplayed="2011-07-24 19:23:50"> 
    <title>Kallichore</title> 
    <artist>Jewitt K. Sheppard</artist> 
</song> 

thì:

<?php 
$mysongs = simplexml_load_file('songs.xml'); 
echo $mysongs->song[0]->artist; 
?> 

Output trên trình duyệt của bạn: tàu của Nomads

tín: http://blog.teamtreehouse.com/how-to-parse-xml-with-php5

1

đơn giản tập tin tải xml ..

$xml = @simplexml_load_string($retValuet); 

$status = (string)$xml->Status; 
$operator_trans_id = (string)$xml->OPID; 
$trns_id = (string)$xml->TID; 

?>

2
$sXML = download_page('http://alanstorm.com/atom'); 
// Comment This  
// $oXML = new SimpleXMLElement($sXML); 
// foreach($oXML->entry as $oEntry){ 
// echo $oEntry->title . "\n"; 
// } 
// Use json encode 
$xml = simplexml_load_string($sXML); 
$json = json_encode($xml); 
$arr = json_decode($json,true); 
print_r($arr); 
+0

download_page(), thực sự? Ít nhất là khi bạn đề xuất một hàm, hãy gắn liền với các hàm dựng sẵn hoặc xác định các hàm bạn đang đề xuất. Người mới có thể dễ dàng bị lạc. Tôi đề nghị bạn chỉnh sửa và thay thế nó bằng một file_get_contents đơn giản() ít nhất. – Darthur

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