Accediendo a @attribute desde SimpleXML
Pregunta
Tengo problemas para acceder a la sección @attribute
de mi objeto SimpleXML. Cuando var_dump
todo el objeto, obtengo la salida correcta, y cuando var_dump
el resto del objeto (las etiquetas anidadas), obtengo la salida correcta, pero cuando Sigo los documentos y var_dump
$ xml- > OFFICE- > {'@ atributos'}
, obtengo un objeto vacío, a pesar de que el primer
¿Alguien sabe qué estoy haciendo mal aquí / cómo puedo hacer que esto funcione?
Solución
Puede obtener los atributos de un elemento XML llamando a la función atributos () en un nodo XML. Luego 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";
}
Otros consejos
Prueba esto
$xml->attributes()->Token
Utilicé tantas veces antes 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:
Forma estándar: atributos de acceso a matriz (AAA)
$xml['field'];
Otras alternativas son:
Derecha & amp; Formato rápido
$xml->attributes()->{'field'};
Formatos incorrectos
$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"]
Use SimpleXMLElement :: atributos
.
La verdad es que el get_properties
manejador SimplexMLElement Miente a lo grande. No hay ninguna propiedad llamada " @ atributos " ;, por lo que no puede hacer $ sxml- > elem- > {" @ atributos "} [" attrib "]
.
Puedes simplemente hacer:
echo $xml['token'];
Si está buscando una lista de estos atributos, XPath será su amigo
print_r($xml->xpath('@token'));
Desafortunadamente tengo una compilación única (atrapada 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 'Right & amp; Quick ', y todos fallaron.
El hecho de que este sea el formato más fácil es una ventaja, pero no disfruté pensando que estaba loco probando todos los formatos que otros decían que funcionaban.
Njoy por lo que vale (¿mencioné una compilación única?).
Me ayudó a convertir el resultado de simplexml_load_file ($ file) en una Estructura JSON y decodificarlo de nuevo:
$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
)