simplexmlelement simplexml_load_string simplexml_load_file ejemplo attribute array php xml simplexml

simplexml_load_string - simplexmlelement php ejemplo



Accediendo @attribute desde SimpleXML (8)

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 resto del objeto (las etiquetas 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?


Desafortunadamente, tengo una compilació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?).


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''];


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 )


Prueba esto

$xml->attributes()->Token


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


Puedes hacer:

echo $xml[''token''];


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

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


$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"]

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"] .