2009-10-18 31 views
17

有沒有人知道一個快速的方法來將SimpleXMLElement轉換爲正常的STDClass對象,而無需手動迭代每個分支?在獲取數據之後,我會更好地使用普通對象。將simpleXMLObject快速轉換爲STDClass?

+0

你的意思是導入一個的SimpleXMLElement的所有公共屬性?快速是相對的:) – Flavius 2009-10-18 12:15:01

+0

你會「感覺更好」不是一個有效的原因imo :)你想要一個stdClass工作的真正原因是什麼? – chelmertz 2009-10-18 12:23:04

+3

那麼,我從XML文件中提取數據並在相當複雜的系統中處理它。從那時起,我不需要任何XML/SimpleXML特定的行爲,而只需要原始數據。 PHP的XML函數通常不像該語言的其他部分那麼好記錄,並且當它仍然是simpleXML元素時,在處理數據時我擔心意外的行爲。使用STDClass,我知道該期待什麼,如何操作它,驗證數據等等。這是「感覺更好」的長版。感覺好多了? :) – 2009-10-18 13:14:03

回答

4

我建議正在研究使用的XMLReader,這很適合提取數據,並把它作爲任何數據類型的意願,而不是的SimpleXML。這是特別好,定期使用的文件(我使用它,引申爲RSSReader,爲RSS),運行速度遠高於所預期,並且作爲獎金使用較少的內存比的SimpleXML

+0

謝謝GZipp,我會研究一下。 – 2009-10-18 23:32:44

1

我不知道是否有對象轉換,而無需通過它迭代的方式。我的猜測是你不能。

您可以檢查此thread出來,它表明你如何將SimpleXML的轉換爲數組,可以適應這一點。

+0

downvote的原因? – 2014-08-02 17:47:07

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

這就像一個魅力! – Eric 2012-09-10 22:23:11

+1

+1超級解決方案,效果很好。 – Cyclonecode 2013-02-08 20:50:23

+2

+1,這絕對應該是選擇的答案。我需要將它轉換爲stdClass的原因是Drupal與SimpleXmlElement對象存在問題。 – 2013-03-21 20:54:27

2

另一種方法是:

(object)(array)$my_simplexmlelement 

不幸的是如果你有孩子,他們仍然爲的SimpleXMLElement

相關問題