快速将 simpleXMLObject 转换为 STDClass?

Quickly convert simpleXMLObject to STDClass?

提问人:Pekka 提问时间:10/18/2009 更新时间:6/12/2013 访问量:16915

问:

有没有人知道将 SimpleXMLElement 转换为普通 STDClass 对象的快速方法,而无需手动遍历每个分支?获取数据后,使用普通对象会感觉更好。

PHP 简单 XML

评论

0赞 Flavius 10/18/2009
你的意思是导入那个SimpleXMLElement的所有公共属性?快速是相对:)
0赞 chelmertz 10/18/2009
你会“感觉更好”不是 imo :) 的正当理由您想要使用 stdClass 的真正原因是什么?
6赞 Pekka 10/18/2009
好吧,我正在从 XML 文件中获取数据,然后在一个相当复杂的系统中对其进行处理。从那时起,我不需要任何特定于 XML/SimpleXML 的行为,而只需要原始数据。PHP 的 XML 函数往往不像语言的其他部分那样有很好的文档记录,我担心在处理数据的过程中会出现意外行为,因为它仍然是一个简单的 XML 元素。有了 STDClass,我知道会发生什么、如何操作它、验证数据等等。这就是“感觉更好”的长版本。感觉好些了吗?:)

答:

1赞 Alex Ciminian 10/18/2009 #1

我不知道是否有办法在不遍历对象的情况下转换对象。我的猜测是你不能。

你可以查看这个线程,它告诉你如何将 SimpleXML 转换为数组,你可以调整它。

6赞 GZipp 10/19/2009 #2

我建议考虑使用 XMLReader,它非常适合提取数据并将其存储为任何类型的数据类型,而不是 SimpleXML。它特别适合经常使用的文档(我使用它,扩展为 RSSReader,用于 RSS),比预期的要快得多,并且作为奖励,它使用的内存比 SimpleXML 少。

75赞 Skyler Johnson 3/20/2011 #3
$my_std_class = json_decode(json_encode($my_simplexmlelement));
$my_assoc_array = json_decode(json_encode($my_simplexmlelement), true);

评论

2赞 Jason Fuller 3/22/2013
+1,这绝对应该是选择的答案。我需要将其转换为 stdClass 的原因是 Drupal 的 SimpleXmlElement 对象存在问题。
0赞 Rounds 2/3/2015
非常好!工作出色的:)
0赞 mahen3d 10/26/2015
这导致将 SimpleXMLElement 类成员变量(例如“MemberTypeArray”)转换为“membertypearray”(小写)如何避免这种情况?并使用这个函数将其转换为标准类?
2赞 Capy 6/12/2013 #4

另一种方法是:

(object)(array)$my_simplexmlelement

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