我有下面的代码,它创建一个对象,然后将对象转换为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']);
}
我不知道这是可能的,但它正在发挥作用。谢谢你的帮助。