【问题标题】:Create XML File with multiplle child nodes in Java在 Java 中创建具有多个子节点的 XML 文件
【发布时间】:2012-11-16 15:51:37
【问题描述】:

我想创建如下所示的 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 的类,它具有属性和 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();

最后是我的 writer 类 - 当我只有一个订单详细信息时,它可以正常工作并以正确的 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); 

    }

【问题讨论】:

标签: java xml xpath jdom


【解决方案1】:

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

【讨论】:

  • 谢谢 - 刚刚意识到再看一遍 - 将其更改为另一种称为 DoOutput() 的方法并且它有效。
猜你喜欢
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多