Je construis une classe de géocodage pouvant utiliser plusieurs webservices de géocodage (Google, Yahoo, Bing, etc.). J'essaie de le faire de manière à ce que les nouveaux webservices puissent être facilement configurés. La plupart des services Webservices revenaient soit XML / JSON .. Pour PHP, j'ai choisi XML comme objectif principal. Tout le code est déjà en place, mais maintenant Google, par exemple, renvoie le XML suivant (transformé en un simple_xml_element) Les informations dont j'ai besoin sont dans la balise [Emplacement], donc j'ai essayé de stocker le chemin dans un var: p> puis essayez d'accéder à la valeur de cette façon: p> mais ceci ne travaille pas. Y a-t-il un moyen que je puisse accéder aux informations de manière dynamique ou variable. Je ne veux pas ruiner ma méthode de géocodage avec le code spécifique Google. P> Merci! P> P>
3 Réponses :
Lorsque vous faites
$xml->result[0]->geometry->location->lat;
Si vous ne pouvez pas utiliser XPath et besoin d'accéder à un objet de manière dynamique, vous pouvez utiliser l'approche suivante:
$oObj = new StdClass; $oObj->Root->Parent->ID = 1; $oObj->Root->Parent->Child->ID = 2; $sSeachInTree = 'Root\\Parent\\Child\\ID'; $aElements = explode("\\",$sSeachInTree); foreach($aElements as $sElement) { if (isset($oObj->{$sElement})) { if (end($aElements) == $sElement) { echo "Found: " . $sElement . " = " . $oObj->{$sElement}; } $oObj = $oObj->{$sElement}; } }
J'ai couru dans cette question aujourd'hui. Voici ma solution.
Utilisez SimplexMlelement :: XPath au lieu de la notation d'objection PHP. (Si vous pouvez montrer une partie du XML, je vais essayer de fournir un exemple de mise en œuvre)
Vous pouvez écrire une méthode pour cela et oublier ..
J'ai essayé d'utiliser XPath aussi, mais cela n'a pas fonctionné :( print_r ($ xml-> xpath ('géométrie / emplacement')); m'a donné un tableau vide.