【问题标题】:How to add an element to an array inside a SimpleXMLElement Object如何将元素添加到 SimpleXMLElement 对象内的数组
【发布时间】:2011-10-11 09:49:03
【问题描述】:

我使用 SimpleXML 解析了这个对象:

SimpleXMLElement Object
(
[contact] => SimpleXMLElement Object
    (
        [name] => Some guy
        [number] => **********
    )

[messages] => SimpleXMLElement Object
    (
        [msg] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [from] => Some guy
                        [message] => Hey
                        [5] => SimpleXMLElement Object
                            (
                            )

                    )

                [1] => SimpleXMLElement Object
                    (
                        [from] => Qasim Iqbal
                        [message] => Hows it going?
                    )

                [2] => SimpleXMLElement Object
                    (
                        [from] => Some guy
                        [message] => Not bad... just doing some homework
                    )

                [3] => SimpleXMLElement Object
                    (
                        [from] => Some guy
                        [message] => Im just kidding I'm playing games
                    )

                [4] => SimpleXMLElement Object
                    (
                        [from] => Qasim Iqbal
                        [message] => lol...
                    )

            )

    )

)

在我的 PHP 文件中,该对象名为 $chat。 我的目标是在 [msg] 数组中添加另一个元素,使整个数组看起来像这样:

[msg] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [from] => Some guy
                    [message] => Hey
                )

            [1] => SimpleXMLElement Object
                (
                    [from] => Qasim Iqbal
                    [message] => Hows it going?
                )

            [2] => SimpleXMLElement Object
                (
                    [from] => Some guy
                    [message] => Not bad... just doing some homework
                )

            [3] => SimpleXMLElement Object
                (
                    [from] => Some guy
                    [message] => Im just kidding I'm playing games
                )

            [4] => SimpleXMLElement Object
                (
                    [from] => Qasim Iqbal
                    [message] => lol...
                )

            [5] => SimpleXMLElement Object
                (
                    [from] => Some guy
                    [message] => what are you laughing at?
                )

        )

注意键为“5”的元素是如何添加的。我正在尝试这样做:

$chat->messages->msg->addChild(sizeof($chat->messages->msg));

但是由于某种原因这不起作用,因为 $chat->messages->msg 自动定义为 $chat->messages->msg[0],而不是整个数组。可能是什么问题?

【问题讨论】:

    标签: php arrays object simplexml addchild


    【解决方案1】:

    SimpleXML 做了很多自动类型强制转换,这会使事情变得非常混乱。你有没有尝试过这样的事情?

    $messages = (array) $chat->messages;
    $messages[] = (object) array(
      'from' => 'Barak Obama',
      'message' => 'I love you.',
    );
    

    【讨论】:

    • 这个问题是我从数据库外部获取 XML,需要将其转换为对象。除了 SimpleXML 之外,我还可以使用其他东西将 XML 转换为对象吗?
    【解决方案2】:

    print_r 输出中的“数组”并不是真正的数组 - 这只是 PHP 试图向您展示 SimpleXML 对象的状态,该对象有 4 个子元素,都称为 <msg>

    ->addChild() 方法需要在您要为其创建子节点的父节点上运行。

    $chat->messages->msg 将返回messages 的所有子节点列表,标签名称为<msg>;正如您所发现的,如果 SimpleXML 需要作用于单个元素,它将假定您需要该列表中的第一项。

    这两个都不是您想要的 - 您想将一个新的 <msg> 子节点添加到节点 $chat->messages,然后是该节点的两个子节点(<from><message> 节点)。

    试试这个:

    $new_item = $chat->messages->addChild('msg');
    $new_item->addChild('from', 'Some guy');
    $new_item->addChild('message', 'what are you laughing at?');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 2017-01-12
      相关资源
      最近更新 更多