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 var_dump muestra claramente que hay atributos para generar.

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

¿Fue útil?

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
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top