2011-05-30 69 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。 我希望这个答案是有帮助的。