2012-01-30 111 views
0

如何使用PHP解析網絡上的XML?使用PHP解析XML網頁

這是example XML。你如何得到第一個「AskRealtime」的價值?

我知道SimpleXML。我正在尋找適當的代碼來打開XML網頁,並使用SimpleXML處理它。

這表明代碼不會成功地加載該網頁:

$xml = @simplexml_load_file("http://query.yahooapis.com/v1/public/yql?q=select%20symbol%2C%20AskRealtime%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22A%22%2C%22AA%22)&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys"); 

$price = $xml->results->quote[0]->AskRealtime; 

echo $price; 

回答

2

您是否嘗試過使用SimpleXMLElement?它和你的代碼一樣工作,但它的構造方式不同。

$url = 'http://query.yahooapis.com/v1/public/yql?q=select%20symbol%2C%20AskRealtime%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22A%22%2C%22AA%22)&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys'; 
$xml = new SimpleXMLElement($url, null, true); 
echo $xml->results->quote[0]->AskRealtime; 

獲取文件內容有多種不同的方法,即使我懷疑它是問題所在。

/* cURL */ 
$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
$contents = curl_exec($curl); 
curl_close($curl); 

/* Alternative */ 
$contents = file_get_contents($url); 

你能說出你得到的錯誤是什麼嗎?或者嘗試var_dump($xml)並查看它返回的結果。

+0

未捕獲錯誤:chrome.tabs只能用於擴展進程。查看內容腳本文檔以獲取更多詳細信息。 – 2012-01-30 20:50:52

+0

是否有任何理由我可以從瀏覽器訪問鏈接,但不是從一些試圖打開它的PHP文件?我在這裏忽略了一些「同源」的東西嗎? – 2012-01-30 20:53:54

+0

@DonnyP你可以從你的代碼中刪除任何@signs,並將即將到來的PHP錯誤添加到原始問題中嗎?也嘗試至少一些我在我的答案中描述的替代方法。 – 2012-01-30 20:56:43

2

步驟1。 - 在SimpleXML $xml = @simplexml_load_file($fl) or die($errorMsg);中加載文件,其中$ fl是文件URL,$ errorMsg是要顯示的錯誤消息。

步驟2。 - 獲取內容$whatever=$xml->results->quote->AskRealtime[0];解釋:它轉到XML,然後命名爲「結果」,然後命名爲「quote」,然後命名爲AskRealtime,但它的第一個(索引0)。

並記:如果由於某種原因,你必須要得到的東西被命名爲任何-ELSE(所以它有一個 - 在名稱),然後,如果你做的代碼只能$xml->{'whatever-else'}

+0

感謝axiomer - 但代碼沒有成功加載文件。 – 2012-01-30 20:39:34