【发布时间】:2023-03-16 09:23:02
【问题描述】:
我有类似的结构
class Header{
List<Item> items
}
Header 和 Item 都有 xsd 架构。我需要将包含其中项目的 Header 写入 xml 文件,而无需在内存中填充 List,因为最多可能有 10000 个元素。 我不能做类似 marshaller.marshal(header) 因为项目没有填充。我看到以下解决方案:使用 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 结构非常庞大且困难,并且迭代每个元素都有些矫枉过正。 同样在我的解决方案中,如何同步命名空间以使标头和所有项目具有相同的前缀?
【问题讨论】: