如何解决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\"}]}
任何人都知道如何阻止这种情况的发生。我只想要英国温克菲尔德,温莎,伯克希尔SL4 2ES的价格。
解决方法
尚未测试您的特定情况,但我记得使用SimpleXML时遇到了类似情况,您可能想使用(string)将其从对象中抛出
array(\'output\'=> (string)$start[0])
或更确切地说,只需忽略$ start = array($ start)并执行
array(\'output\'=> (string)$start)
再次阅读SimpleXML XPath文档(http://www.php.net/manual/zh/simplexmlelement.xpath.php)时,我认为您的问题可能是这样的:
Returns an array of SimpleXMLElement objects or FALSE in case of an error.
因此,XPath返回一个数组,然后将其包装在一个数组中并获取该数组的第一个元素,因此最终得到的只是原始数组-删除数组包装,您应该一切都好
, 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相同。
我希望这个答案会有所帮助。
, 只是回声$ start?另外,为什么要创建一个start数组然后输出第一个元素,它根本没有任何意义。
, echo $xml->route->leg->start_address;
这是编辑后的答案。我检查了它可以在XML上正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。