快速将 simpleXMLObject 转换为 STDClass?

Posted

技术标签:

【中文标题】快速将 simpleXMLObject 转换为 STDClass?【英文标题】:Quickly convert simpleXMLObject to STDClass? 【发布时间】:2010-12-07 18:28:25 【问题描述】:

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

【问题讨论】:

您的意思是导入该 SimpleXMLElement 的所有公共属性?快速是相对的:) 您会“感觉更好”不是 imo 的正当理由 :) 您想要使用 stdClass 的真正原因是什么? 嗯,我正在从一个 XML 文件中获取数据,然后在一个相当复杂的系统中对其进行处理。从那时起,我不需要任何 XML/SimpleXML 特定的行为,而只需要原始数据。 php 的 XML 函数往往不像语言的其他部分那样有很好的文档记录,而且我担心在操作数据的过程中会出现意外行为,因为它仍然是一个 simpleXML 元素。有了 STDClass,我知道会发生什么、如何操作它、验证数据等等。那是“感觉更好”的长版本。感觉好多了? :) 【参考方案1】:

我不知道是否有一种方法可以在不迭代对象的情况下转换它。我的猜测是你不能。

您可以查看thread,它向您展示了如何将 SimpleXML 转换为数组,您可以调整它。

【讨论】:

【参考方案2】:

我建议考虑使用 XMLReader,它可以很好地提取数据并将其存储为人们希望的任何数据类型,而不是 SimpleXML。它对经常使用的文档特别有用(我使用它,扩展为 Rs-s-reader,用于 RSS),比预期的要快得多,而且比 SimpleXML 使用更少的内存em>。

【讨论】:

谢谢 GZipp,我会调查的。【参考方案3】:
$my_std_class = json_decode(json_encode($my_simplexmlelement));
$my_assoc_array = json_decode(json_encode($my_simplexmlelement), true);

【讨论】:

+1,这绝对应该是选择的答案。我需要将其转换为 stdClass 的原因是 Drupal 的 SimpleXmlElement 对象存在问题。 太棒了!工作得很好:) 这会导致将 SimpleXMLElement 类成员变量(例如“MemberTypeArray”)转换为“membertypearray”(小写)我该如何避免这种情况?并使用此函数将其转换为 std 类?【参考方案4】:

另一种方式是:

(object)(array)$my_simplexmlelement

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

【讨论】:

以上是关于快速将 simpleXMLObject 转换为 STDClass?的主要内容,如果未能解决你的问题,请参考以下文章

从 SimpleXMLObject 中删除项目 [重复]

快速、轻量级的 XML 解析器 [关闭]

python怎么将数组转换为矩阵

快速将正值转换为负值

快速将字符串转换为二进制?

快速将 CAShapelayer 转换为特定大小