PHP Получить данные из XML

Моя первая попытка получить данные из 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.