我有以下代码创建一个对象,然后将该对象转换为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;
答案 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']);
}
我不知道这是可能的,但它确实有效。谢谢你的帮助。