gpt4 book ai didi

java - 在Java中创建具有多个子节点的XML文件

转载 作者:太空宇宙 更新时间:2023-11-04 07:57:17 24 4
gpt4 key购买 nike

我想创建如下所示的 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();

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

}

最佳答案

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

关于java - 在Java中创建具有多个子节点的XML文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13419956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com