组合多个对象

时间:2012-02-20 09:48:44

标签: php object

我有以下代码创建一个对象,然后将该对象转换为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;

2 个答案:

答案 0 :(得分:0)

除非您开始弄乱串行器输出,否则它们不能是正确的xml文件。每个都将以xml标头(<?xml ...)开头。只能有其中一个......

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

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

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

我最近做了字符串manouevre它工作得很好......

答案 1 :(得分:0)

我似乎对它进行了分类。这很简单。我只需要制作对象数组,如下所示:

$ordersObj = array();

    foreach ($orders as $order => $orderdetail){

        //create Order XML from object
        $ordersObj[] = new Order($db, $shopKeeperID, $orderdetail['id']);

    }

我不知道这是可能的,但它确实有效。谢谢你的帮助。