如何将列表写入xml而不是在内存中填充列表

时间:2016-10-27 19:46:27

标签: java xml jaxb stax

我的结构类似

class Header{

List<Item> items
}

Header和Item都有xsd架构。我需要将包含其中项目的Header写入xml文件而不在内存中填充List,因为最多可以有10000个元素。 我不能像marshaller.marshal(标题)这样做,因为没有填充项目。我看到以下解决方案:使用marshaller将每个项目映射到xml字符串,并逐项将其写入文件。在从pojo手动创建标题之前,也可以手动关闭它。

Header doc=header data withoutitems
int counter=0;

//call it 10000 times
void writeItem(Item item){
if(counter==0){
FileWriter writer=new FileWriter(path);
String header1 = convertToXmlString(doc.getHeader1());
String header2 = convertToXmlString(doc.getHeader2());
writer.write("<?xml bla>")
writer.write("<myroot>")
writer.write(header1)
writer.write(header2)
}

writer.write(jaxbMarshaler.marshal(item));
counter++

if(counter==10000){
   writer.write("</myroot>")
}
}

有更优雅的解决方案吗?我不能(不想要)使用普通的Stax,因为Item结构非常庞大而且很困难,并且迭代每个元素都是过度的。 另外在我的解决方案中如何同步名称空间,以便标题和所有项目具有相同的前缀?

1 个答案:

答案 0 :(得分:0)

请参阅JAXB Fragmented Marshalling

您基本上将XMLStreamWriter与JAXB片段合并。