2009-10-18 12 views
17

Qualcuno conosce un modo rapido per convertire un oggetto SimpleXMLElement in un oggetto STDClass normale, senza scorrere manualmente ogni ramo? Mi sentirò meglio lavorando con un oggetto normale dopo aver recuperato i dati.Converti rapidamente simpleXMLObject in STDClass?

+0

Vuoi dire l'importazione di tutte le proprietà pubbliche che SimpleXMLElement? Quick è relativo :) – Flavius

+0

Si "sentirsi meglio" non è una ragione valida imo :) Qual è il vero motivo per cui si desidera utilizzare una stdClass? – chelmertz

+3

Bene, sto recuperando i dati da un file XML ed elaborandolo successivamente in un sistema piuttosto complesso. Da quel momento non ho bisogno di alcun comportamento specifico XML/SimpleXML, ma solo dei dati grezzi. Le funzioni XML di PHP tendono a non essere ben documentate come le altre parti del linguaggio, e temo un comportamento inaspettato quando si manipolano i dati lungo la strada, essendo ancora un semplice elemento XML. Con un STDClass, so cosa aspettarmi, come manipolarlo, convalidare i dati e così via. Questa è la versione lunga di "sentirsi meglio". Sentirsi meglio? :) –

risposta

4

suggerisco di guardare in utilizzando XMLReader, che si presta bene alla estrazione dei dati e la memorizzazione come qualunque tipo di dati si vuole, invece di SimpleXML. È particolarmente utile per i documenti usati regolarmente (lo uso, esteso come RSSReader, per RSS), è molto più veloce di quanto ci si potrebbe aspettare e, come bonus, utilizza meno memoria di SimpleXML.

+0

Grazie a GZipp, lo esaminerò. –

1

Non so se c'è un modo per convertire l'oggetto senza iterarlo attraverso di esso. La mia ipotesi è che non puoi.

È possibile controllare questo thread out, mostra come convertire un SimpleXML in un array, è possibile adattarlo.

+0

Motivo del downvote? –

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

Funziona come un fascino !!! – Eric

+1

+1, super soluzione, funziona alla grande. – Cyclonecode

+2

+1, questa dovrebbe essere la risposta scelta. Il motivo per cui avevo bisogno di convertirlo in stdClass era perché Drupal ha problemi con l'oggetto SimpleXmlElement. –

2

Un altro modo è:

(object)(array)$my_simplexmlelement 

Purtroppo se avete bambini rimangono come SimpleXMLElement