web-dev-qa-db-fra.com

Accéder à @attribute à partir de SimpleXML

J'ai un problème pour accéder au @attribute section de mon objet SimpleXML. Quand je var_dump l’objet entier, j’obtiens le bon résultat, et quand j var_dump le reste de l’objet (les balises imbriquées), j’obtiens la sortie correcte, mais lorsque je suis la documentation et var_dump$xml->OFFICE->{'@attributes'}, Je reçois un objet vide, malgré le fait que le premier var_dump montre clairement qu'il existe des attributs à afficher.

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

106
benjy

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";
}
82
Niels Bom

Essaye ça

$xml->attributes()->Token
123
zysoft

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 à la fois:

Standard Way - 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'];
48
Bora
$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"]

Utilisation SimpleXMLElement::attributes .

La vérité est, le SimpleXMLElement get_properties le gestionnaire se trouve beaucoup de temps. Il n'y a pas de propriété nommée "@attributes", vous ne pouvez donc pas faire $sxml->elem->{"@attributes"}["attrib"].

38
Artefacto

Vous pouvez juste faire:

echo $xml['token'];
15
Alix Axel

Si vous cherchez une liste de ces attributs, XPath sera votre ami.

print_r($xml->xpath('@token'));
7
Cory Collier

Malheureusement, j’ai une version unique (collée avec Gentoo pour le moment) de PHP 5.5, et j’ai trouvé que

 $xml->tagName['attribute']

était la seule solution qui a fonctionné. J'ai essayé toutes les méthodes de Bora ci-dessus, y compris le format 'Right & Quick', et elles ont toutes échoué.

Le fait qu'il s'agisse du format le plus simple est un avantage, mais je n'aimais pas penser que j'étais fou d'essayer tous les formats que d'autres disaient qui fonctionnaient.

Njoy pour ce que sa valeur (ai-je mentionné la construction unique?).

2
Gerard ONeill

Cela m'a aidé à convertir le résultat de simplexml_load_file ($ file) en une structure JSON et à le décoder de nouveau:

$xml = simplexml_load_file("$token.xml");
$json = json_encode($xml);
$xml_fixed = json_decode($json);

$try1 = $xml->structure->{"@attributes"}['value'];
print_r($try1);

>> result: SimpleXMLElement Object
(
)

$try2 = $xml_fixed->structure->{"@attributes"}['value'];
print_r($try2);

>> result: stdClass Object
(
    [key] => value
)
1
t2m