组合多个对象


combine multiple objects

我有下面的代码,它创建一个对象,然后将对象转换为XML。正如你所看到的,我有一个循环,因为我有多个对象。我不想为每个对象创建一个新的XML文件,我希望它们都在同一个XML文件中。因此,在将对象添加到此循环中的XML之前,我需要以某种方式组合这些对象。有人知道怎么做吗?

$orderObj1 = new Order();
    $orders = $orderObj1->getAllOrders();

    foreach ($orders as $order => $orderdetail){
        //create Order XML from object
        $orderObj2 = new Order($orderdetail['id']);
    }
    $serializer = new XML_Serializer(); 
    // set name for root element
    $serializer->setOption("rootName", "orders");   
    //add the XML declaration
    $serializer->setOption("addDecl", "true");

    $result = $serializer->serialize($orderObj2);
    if($result === true) {
     $orders_xml = $serializer->getSerializedData();
    }   
    echo  $orders_xml;

除非您开始扰乱serializer输出,否则它们不可能是正确的xml文件。每一个都将以一个xml头(<?xml ...)开始。他们中只能有一个。。。

这不一定是个问题,您可以将输出视为一系列xml文档,并在尝试取消序列化(或任何其他形式的xml过程)之前将它们切碎(作为字符串)。

您可以创建一个xml文档集合对象,然后使用CDATA标记对其进行序列化。

理论上,你可以深度复制序列化对象中的每个节点,整理名称空间,然后反转去序列化的过程,但这将非常脆弱。。。。

我最近做了弦乐演奏,效果很好。。。

我似乎已经对它进行了排序。这真的很简单。我只需要制作一个对象数组,如下所示:

$ordersObj = array();
    foreach ($orders as $order => $orderdetail){
        //create Order XML from object
        $ordersObj[] = new Order($db, $shopKeeperID, $orderdetail['id']);
    }

我不知道这是可能的,但它正在发挥作用。谢谢你的帮助。