2009-10-18 14 views
17

¿Alguien sabe una forma rápida de convertir un elemento SimpleXMLElement a un objeto STDClass normal, sin iterar a través de cada rama manualmente? Me sentiría mejor trabajando con un objeto normal después de obtener los datos.¿Convertir rápidamente simpleXMLObject a STDClass?

+0

¿Quiere decir la importación de todos los bienes de dominio público de que SimpleXMLElement? Rápido es relativo :) – Flavius

+0

Usted "se sentiría mejor" no es una razón válida imo :) ¿Cuál es el verdadero motivo por el que desea que un stdClass funcione? – chelmertz

+3

Bueno, estoy obteniendo datos de un archivo XML y procesándolo luego en un sistema bastante complejo. A partir de ese punto, no necesito ningún comportamiento específico XML/SimpleXML, sino solo los datos brutos. Las funciones XML de PHP tienden a no estar tan bien documentadas como las otras partes del lenguaje, y temo un comportamiento inesperado al manipular los datos a lo largo del camino, ya que sigue siendo un simple elemento XML. Con un STDClass, sé qué esperar, cómo manipularlo, validar los datos, etc. Esa es la versión larga de "sentirse mejor". ¿Sentirse mejor? :) –

Respuesta

4

Sugiero mirar en el uso de XMLReader, que se presta bien a la extracción de datos y almacenarla como cualquier tipo de datos que uno desea, en lugar de SimpleXML. Es especialmente bueno para los documentos utilizados regularmente (lo uso, extendido como RSSReader, para RSS), es mucho más rápido de lo que cabría esperar, y como beneficio adicional, utiliza menos memoria que SimpleXML.

+0

Gracias GZipp, investigaré eso. –

1

No sé si hay una forma de convertir el objeto sin recorrerlo. Yo creo que no puedes.

Puede consultar esto thread, le muestra cómo convertir un SimpleXML a una matriz, puede adaptar eso.

+0

Motivo del voto a favor? –

63
$my_std_class = json_decode(json_encode($my_simplexmlelement)); 
$my_assoc_array = json_decode(json_encode($my_simplexmlelement), true); 
+0

Esto funciona como un encanto! – Eric

+1

+1, súper solución, funciona muy bien. – Cyclonecode

+2

+1, Esta definitivamente debería ser la respuesta elegida. La razón por la que necesitaba convertirlo a stdClass fue porque Drupal tiene problemas con el objeto SimpleXmlElement. –

2

Otra forma es:

(object)(array)$my_simplexmlelement 

Desafortunadamente, si usted tiene niños que permanecer como SimpleXMLElement