2012-11-16 30 views
1

multiplle子节点的XML文件,我想创建XML文件的形式大致如下 - 我有它输出细到磁盘时,我只创建一个订单明细孩子 - 现在我想创建2(所以最后我能有一个batchheader和多个订单细节上的XML文件。建立在Java

<?xml version="1.0" encoding="UTF-8"?> 
<BatchOrders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <BatchHeader> 
    <Provider>123456789</Provider> 
    <Contact>[email protected]</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> 

所以我有了化子性质和GET/setter方法一类叫做订单明细。我也有写XML头,然后一类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(); 

最后,下面是我的w riter类 - 当我只有一个订单明细时,它可以正常工作,并以正确的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

有一个看看这篇文章: http://stackoverflow.com/questions/4142046/create-xml-file-using-java –

回答

1

在writeNext()方法中,使用outputter在添加orderDetails内容后立即输出文档。我不确定你的输出器是干什么的,但我认为你应该输出,直到你把所有的orderDetails放在文档中。

+0

谢谢 - 方才意识到,再次寻找 - 把它改为叫另一个则将DoOutput方法(),它的工作原理。 –