Моя первая попытка получить данные из XML для приложения карт не удалась. Вот фрагмент 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])); ?>
Раздражающе это возвращает объект к странице.
Response :: {"output":[{"0":"Winkfield, Windsor, Berkshire SL4 2ES, UK"}]}
Кто-нибудь знает, как остановить это. Я просто хочу, чтобы стоимость Winkfield, Windsor, Berkshire SL4 2ES, Великобритания.
Не протестировали ваш конкретный случай, но я помню, что при использовании 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 возвращает массив, затем вы переносите это в массив и берете первый элемент этого массива, поэтому все, что у вас получается, это исходный массив – удалите обертку массива, и вы должны быть в порядке
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? Кроме того, почему вы создаете массив запуска, а затем выводите первый элемент, это вообще не имеет никакого смысла.
echo $xml->route->leg->start_address;
Это отредактированный ответ. Я проверил это. Он корректно работает над XML.