2010-08-19 9 views
1

J'essaye d'analyser cela en utilisant PHP et simplexml_load_file mais cela ne montre rien?Problème d'analyse xml

http://developer.multimap.com/API/geocode/1.2/OA10081917657704697?qs=Heaton&countryCode=GB

Où vais-je tort? Merci

$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->area; 
     echo "<br />"; 
     } 
    } 
    } 
} 
+0

Juste après l'appel 'simplexml_load_file', mis en' var_dump (résultats $) 'et montrer ce qui est retourné. Aussi, avez-vous vérifié vos journaux? Et définissez error_reporting à 'E_ALL' pour vérifier les erreurs ... – ircmaxell

+0

$ xml = simplexml_load_file ($ url); var_dump ($ xml); Qui ramène tout en arrière – Ashley

Répondre

1

Si vous aviez error_reporting et display_errors activé, vous verrez il y a un

Fatal error: Call to undefined method SimpleXMLElement::Location() 

Vous essayez d'accéder aux éléments avec des appels Méthode, par exemple

foreach($results->Location() as $location) { 

quand il devrait être

foreach($results->Location as $location) { 

Même chose pour les autres éléments.
En outre, ce n'est pas $area->area mais juste $area.

code fixe complet:

$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 />"; 
     } 
    } 
    } 
} 

Sur sidenote, vous pouvez obtenir tous les éléments de la région dans le document sans boucle comme un fou lorsque vous utilisez un XPath. Cependant, étant donné que les éléments sont espaces de noms, vous devez vous enregistrer cet espace de noms avec un préfixe premier à pouvoir utiliser 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/>"; 
} 

Encore une autre façon d'obtenir sur tous les éléments (bien que moins performat que d'utiliser un XPath) serait d'utiliser un Iterator pour marcher sur l'arbre DOM:

$elements = new RecursiveIteratorIterator(
    simplexml_load_file($url, 'SimpleXmlIterator')); 

foreach($elements as $element) { 
    if($element->getName() === 'Area') { 
     echo $element; 
    } 
} 
+0

Brillant! Je vous remercie!! :RÉ – Ashley