2011-05-30 66 views
1

我第一次嘗試從XML中爲地圖應用程序檢索數據失敗。這是一個XML Feed。PHP從XML中檢索數據

<?xml version="1.0" encoding="UTF-8"?> 
<DirectionsResponse> 
<status>OK</status> 
<route> 
    <leg> 

    <start_address>Winkfield, Bracknell, Berkshire RG42 6LY, UK</start_address> 
    <end_address>Wentworth, Surrey GU25 4, UK</end_address> 

    </leg> 
</route> 
</DirectionsResponse> 

我想獲取開始和結束地址,並通過AJAX將它們返回給應用程序。

的PHP

<?php 

$start = $_POST['start']; 
$end = $_POST['end']; 

$xml = simplexml_load_file('http://maps.googleapis.com/maps/api/directions/xml?origin='.$start.'&destination='.$end.'&sensor=false'); 


// data to fetch 

$start = $xml->xpath("/DirectionsResponse/route/leg/start_address"); 

$end = $xml->xpath("/DirectionsResponse/route/leg/end_address"); 

$start = array($start); 
// output 

echo json_encode(array('output'=>$start[0])); 


?> 

煩人,這是返回一個對象的頁面。

響應:: {"output":[{"0":"Winkfield, Windsor, Berkshire SL4 2ES, UK"}]}

任何人都知道如何阻止這種情況發生。我只想要價值Winkfield,溫莎,伯克希爾SL4 2ES,英國。

+0

可以顯示$ start的print_r; – jimy 2011-05-30 12:59:34

+0

用手做。例如。 'echo':{'start':'$ start','end':'$ end'}}「;' – Nemoden 2011-05-30 13:02:35

+0

我想他意味着他想用'{」輸出「:」 Winkfield,Windsor,Berkshire SL4 2ES,英國「} – 2011-05-30 13:02:38

回答

3

沒有測試您的具體情況,但我記得運行到類似的東西使用SimpleXML時,您可能需要使用(字符串)投出來的對象

array('output'=> (string)$start[0]) 

或者說只是離開了$啓動=陣列($開始),只是做

array('output'=> (string)$start) 

在閱讀SimpleXML的XPath文檔(http://www.php.net/manual/en/simplexmlelement.xpath.php)再次,我認爲你的問題可能是這樣的:

Returns an array of SimpleXMLElement objects or FALSE in case of an error. 

因此,XPath返回一個數組,那麼你包在一個數組,並採取數組的第一個元素,所以你最終得到的是原始數組 - 刪除陣列包裝和你應該罰款

0
echo $xml->route->leg->start_address; 

這是編輯的答案。我檢查了它。它在XML上正常工作。

+0

加載xml文件後使用此代碼。你不需要XPATH行。 – 2011-05-30 13:06:01

0

只是echo $ start?另外,爲什麼你做了一組開始,然後輸出第一個元素,它根本沒有任何意義。

+0

這不起作用。這是我開始的 – 2011-05-30 13:04:35

1
function XMLReader() 
{ 
    $MyArray = array(); 

    $doc = new DOMDocument(); 
    $doc->load('XMLFilePath.xml'); 
    $info = $doc->getElementsByTagName("leg"); 
    foreach($info as $Type) 
    { 
     $details = $Type->getElementsByTagName("start_address"); 
     $detail = $details->item(0)->nodeValue;  
     $MyArray [] = $detail; 
    } 

    return $MyArray; 
} 

and end for end_Address。 我希望這個答案是有幫助的。