我的结构类似
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结构非常庞大而且很困难,并且迭代每个元素都是过度的。 另外在我的解决方案中如何同步名称空间,以便标题和所有项目具有相同的前缀?