Accediendo @attribute desde SimpleXML

Tengo un problema al acceder a la sección @attribute de mi objeto SimpleXML. Cuando var_dump el objeto completo, obtengo el resultado correcto, y cuando var_dump el rest del objeto (las tags anidadas), obtengo el resultado correcto, pero cuando sigo los documentos y var_dump $xml->OFFICE->{'@attributes'} , obtengo un objeto vacío, a pesar de que el primer var_dump muestra claramente que hay atributos para mostrar.

¿Alguien sabe lo que estoy haciendo mal aquí / cómo puedo hacer que esto funcione?

Puede obtener los atributos de un elemento XML llamando a la función attributes () en un nodo XML. A continuación, puede var_dump el valor de retorno de la función.

Más información en php.net http://php.net/simplexmlelement.attributes

Código de ejemplo de esa página:

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

Prueba esto

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

Use SimpleXMLElement::attributes .

La verdad es que el manejador de SimpleXMLElement get_properties yace a lo grande. No hay una propiedad llamada “@attributes”, por lo que no puede hacer $sxml->elem->{"@attributes"}["attrib"] .

Lo utilicé muchas veces para obtener @attributes como a continuación y fue un poco más largo.

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

Debería ser más fácil y puede obtener atributos siguiendo el formato solo de una vez:

Standard Way – Atributos de acceso de matriz (AAA)

 $xml['field']; 

Otras alternativas son:

Formato correcto y rápido

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

Formatos incorrectos

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

Puedes hacer:

 echo $xml['token']; 

Si estás buscando una lista de estos atributos, XPath será tu amigo

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

Desafortunadamente, tengo una comstackción única (pegada con Gentoo por el momento) de PHP 5.5, y lo que encontré fue que

  $xml->tagName['attribute'] 

fue la única solución que funcionó. Probé todos los métodos de Bora anteriores, incluido el formato ‘Right & Quick’, y todos fallaron.

El hecho de que este es el formato más fácil es una ventaja, pero no me gustó pensar que estaba loco probando todos los formatos que otros decían que funcionaban.

Njoy por lo que vale (¿mencioné la construcción única?).

Me ayudó a convertir el resultado de simplexml_load_file ($ file) en una estructura JSON y decodificarlo de vuelta:

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