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

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

【问题讨论】:

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

标签: php simplexml


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我建议考虑使用 XMLReader,它可以很好地提取数据并将其存储为人们希望的任何数据类型,而不是 SimpleXML。它对经常使用的文档特别有用(我使用它,扩展为 RSSReader,用于 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 2019-01-17
      相关资源
      最近更新 更多