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