7
votes

Accédez dynamiquement à un objet imbriqué

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) xxx

Les informations dont j'ai besoin sont dans la balise [Emplacement], donc j'ai essayé de stocker le chemin dans un var: xxx

puis essayez d'accéder à la valeur de cette façon: xxx

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.

Merci!


3 commentaires

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.


3 Réponses :


3
votes

Lorsque vous faites

$xml->result[0]->geometry->location->lat;


0 commentaires

3
votes

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};
    }
}


0 commentaires

0
votes

J'ai couru dans cette question aujourd'hui. Voici ma solution. xxx


0 commentaires