我想创建如下所示的XML文件 - 当我创建一个OrderDetails子项时,我已经将它输出到磁盘 - 现在我想创建2(所以最后我可以有一个带有一个批处理头和多个订单的XML文件详细信息。
<?xml version="1.0" encoding="UTF-8"?>
<BatchOrders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BatchHeader>
<Provider>123456789</Provider>
<Contact>ABC@abc.com</Contact>
</BatchHeader>
<OrderDetails>
<Number>0456789</Number>
<YourReference>tc1</YourReference>
<DeliveryDate>23-08-2012</DeliveryDate>
<RetailerID>AAA</RetailerID>
</OrderDetails>
<OrderDetails>
<Number>1234</Number>
<YourReference>tc2</YourReference>
<DeliveryDate>23-08-2013</DeliveryDate>
<RetailerID>BBB</RetailerID>
</OrderDetails>
</BatchOrders>
所以我有一个名为OrderDetails的类,它具有propeties和get / setter。我还有一个编写XML Header然后编写OrderDetails的类 - 这是在下面。
OrderHeader header = new OrderHeader();
header.setProvider("123456789");
//rest of header setting done
OrderWriter writer = new OrderWriter(orderWriter);
writer.Initialise(header);
OrderDetails[] orderdetails = new OrderDetails[3];
for(int i = 0; i < orderdetails.length; i++)
{
orderdetails[i] = new OrderDetails();
orderdetails[i].setDirectoryNumber("0456789" + i);
//rest of sets done
writer.writeNext(orderdetails[i]);
}
writer.close();
下面是我的编写器类 - 当我只有一个订单详细信息时,它工作正常并以正确的XML格式打印文件。当我尝试创建多个OrderDetails子节点的代码时 - 它只是给我第一个订单详细信息重新整理,并且在一长串文本中,因此没有正确格式化的XML - 任何人都可以看到我在这里丢失的愚蠢内容吗?
public void Initialise(OrderHeader header) throws Exception
{
Element batchOrders = new Element("BatchOrders");
document.setRootElement(batchOrders);
Element batchHeader = new Element("BatchHeader");
batchHeader.addContent(new Element("ServiceProvider").setText(header.getServiceProvider()));
//more header sets are done...
document.getRootElement().addContent(batchHeader);
}
public void close() throws Exception { writer.close(); }
public void writeNext(OrderDetails record) throws Exception
{
Element orderDetails = new Element("OrderDetails");
if(record.getNumber() != null)
{
orderDetails.addContent(new Element("Number").setText(record.getNumber()));
}
//More sets are done....
document.getRootElement().addContent(orderDetails);
outputter.getFormat().setOmitDeclaration(true);
outputter.getFormat().setOmitEncoding(true);
outputter.output(document,writer);
}
答案 0 :(得分:1)
在方法writeNext()中,您可以在添加orderDetails内容后立即使用输出器输出文档。我不确定你的输出器是做什么的,但我认为你应该输出,直到你把所有的orderDetails放在文件中。