PHP从XML检索数据

时间:2011-05-30 12:54:21

标签: php xml

我第一次尝试从地图应用程序的XML检索数据失败了。这是XML Feed的一部分。

<?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,Windsor,Berkshire SL4 2ES,UK。

4 个答案:

答案 0 :(得分:3)

没有测试过你的特定情况,但我记得在使用SimpleXML时碰到类似的东西,你可能想用(字符串)把它从对象中抛出来

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

或者只是省略$ start = array($ start)而只是做

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返回一个数组,然后你将它包装在一个数组中并获取该数组的第一个元素,所以你最终得到的就是原始数组 - 删除数组包装你应该没问题

答案 1 :(得分: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;
}

和end_Address相同。 我希望这个答案很有帮助。

答案 2 :(得分:0)

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

这是经过编辑的答案。我检查了一下。它在XML上正常工作。

答案 3 :(得分:0)

只需回显$ start?另外,为什么要创建一个start数组然后输出第一个元素,它根本没有任何意义。