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?
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";
}
Essaye ça
$xml->attributes()->Token
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:
$xml['field'];
Les autres alternatives sont:
$xml->attributes()->{'field'};
$xml->attributes()->field;
$xml->{"@attributes"}->field;
$xml->attributes('field');
$xml->attributes()['field'];
$xml->attributes->['field'];
$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"]
.
Vous pouvez juste faire:
echo $xml['token'];
Si vous cherchez une liste de ces attributs, XPath sera votre ami.
print_r($xml->xpath('@token'));
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?).
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
)