2012-03-13 19 views
7

Cuando print_r() el objeto referenciado por la variable SimpleXMLElement $xmlObject, veo la siguiente estructura:el acceso a ciertas propiedades de un objeto SimpleXMLElement

SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [uri] => /example 
     ) 

    [result] => SimpleXMLElement Object 
     (
      [message] => Record(s) added successfully 
      [recorddetail] => Array 
       (
        [0] => SimpleXMLElement Object 
        ... 
       ) 
     ) 
) 

Aviso cómo la propiedad $xmlObject->result->message parece que es sólo una cadena. Sin embargo, si lo hago print_r($xmlObject->result->message), me sale el siguiente:

SimpleXMLElement Object 
(
    [0] => Record(s) added successfully 
) 

Así que en este punto que estoy confundido. ¿Por qué se identifica $xmlObject->result->message como una instancia de SimpleXMLElement Object en este caso, cuando el resultado de imprimir el $xmlObject completo no sugiere esto?

¿Y cómo accedo realmente a este valor? Intenté $xmlObject->result->message[0], pero solo imprime lo mismo (es decir, el último fragmento de código que publiqué).

Respuesta

7

La representación que obtiene al usar print_r o var_dump en un SimpleXMLElement tiene muy poco que ver con la forma en que está estructurada internamente. Por ejemplo, no hay ninguna propiedad @attributes a la que pueda acceder con $element['@attributes']['uri'] tampoco. Usted acaba de hacer $element['uri']

Esto es simplemente la forma en que es. SimpleXmlElement objetos se comportan diferente. Asegúrese de leer los ejemplos en el Manual de PHP antes de usar SimpleXML:

Comprender la aplicación en detalle, que tendría que mirar el código fuente:

Para imprimir $xmlObject->result->message que acaba de hacer echo $xmlObject->result->message. Eso transferirá automáticamente el SimpleXmlElement a la cadena.

+5

+1 acaba de escribir una respuesta similar. Vale la pena señalar que si desea asignar el valor de cadena de un elemento a una variable, debe convertirlo explícitamente en una cadena. ej. '$ mensaje = (cadena) $ xmlObject-> result-> message' – vascowhite

Cuestiones relacionadas