152 votes

Accéder à @attribute à partir de SimpleXML

Je vais avoir un problème d'accès à l' @attribute section de mon objet SimpleXML. Quand j' var_dump la totalité de l'objet, je reçois le bon de sortie, et quand j' var_dump le reste de l'objet (les balises imbriquées), j'obtiens le bon résultat, mais lorsque je l'ai suivi et la documentation en var_dump $xml->OFFICE->{'@attributes'}, j'obtiens un objet vide, malgré le fait que le premier var_dump montre clairement qu'il y a des attributs à la sortie.

Quelqu'un sait ce que je fais de mal ici/comment je peux faire ce travail?

164voto

zysoft Points 696

Essaye ça

 $xml->attributes()->Token
 

96voto

Niels Bom Points 1955

Vous pouvez obtenir les attributs d'un élément XML en appelant la fonction attributs () sur un nœud XML. Vous pouvez ensuite var_dump la valeur de retour de la fonction.

Plus d'infos sur php.net http://php.net/simplexmlelement.attributes

Exemple de code de cette page:

 $xml = simplexml_load_string($string);
foreach($xml->foo[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}
 

74voto

Bora Points 6113

J'ai déjà utilisé tant de fois pour obtenir @attributes comme ci-dessous et c'était un peu plus long.

 $att = $xml->attributes();
echo $att['field'];
 

Cela devrait être plus facile et vous pouvez obtenir les attributs suivant le format seulement à la fois:

Voie standard - Attributs d'accès aux tableaux (AAA)

 $xml['field'];
 

Les autres alternatives sont:

Format droit et rapide

 $xml->attributes()->{'field'};
 

Mauvais formats

 $xml->attributes()->field;
$xml->{"@attributes"}->field;
$xml->attributes('field');
$xml->attributes()['field'];
$xml->attributes->['field'];
 

45voto

Artefacto Points 50896
 $xml = <<<XML
<root>
<elem attrib="value" />
</root>
XML;

$sxml = simplexml_load_string($xml);
$attrs = $sxml->elem->attributes();
echo $attrs["attrib"]; //or just $sxml->elem["attrib"]
 

Utilisez SimpleXMLElement::attributes .

En vérité, le gestionnaire get_properties SimpleXMLElement est très lourd. Il n'y a pas de propriété nommée "@attributes", vous ne pouvez donc pas faire $sxml->elem->{"@attributes"}["attrib"] .

18voto

Alix Axel Points 63455

Vous pouvez juste faire:

 echo $xml['token'];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X