Если бы вы включили error_reporting
и display_errors
, вы бы увидели
Fatal error: Call to undefined method SimpleXMLElement::Location()
Вы пытаетесь получить доступ к элементам с помощью вызовов методов, например,
foreach($results->Location() as $location) {
когда это должно быть
foreach($results->Location as $location) {
То же самое для других элементов.
Кроме того, это не $area->area
, а просто $area
.
Полный фиксированный код:
$results = simplexml_load_file($url);
foreach($results->Location as $location) {
foreach($location->Address as $address) {
foreach($address->Areas as $areas) {
foreach($areas->Area as $area) {
echo $area;
echo "<br />";
}
}
}
}
В sidenote вы можете получить все элементы Area в документе без зацикливания при использовании XPath. Однако, поскольку элементы имеют пространство имен, вы должны сначала зарегистрировать это пространство имен с префиксом, чтобы использовать XPath:
$results = simplexml_load_file($url);
$results->registerXPathNamespace('d', 'http://clients.multimap.com/API');
$areas = $results->xpath('//d:Area');
foreach($areas as $area) {
echo "$area<br/>";
}
Еще один способ преодолеть все элементы (хотя и менее эффективный, чем использование XPath) - использовать итератор для обхода дерева DOM:
$elements = new RecursiveIteratorIterator(
simplexml_load_file($url, 'SimpleXmlIterator'));
foreach($elements as $element) {
if($element->getName() === 'Area') {
echo $element;
}
}