【问题标题】:How to write list to xml not populating list in memory如何将列表写入xml而不是在内存中填充列表
【发布时间】: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 结构非常庞大且困难,并且迭代每个元素都有些矫枉过正。 同样在我的解决方案中,如何同步命名空间以使标头和所有项目具有相同的前缀?

【问题讨论】:

    标签: java xml jaxb stax


    【解决方案1】:

    参考JAXB Fragmented Marshalling

    您基本上将XMLStreamWriter 与 JAXB 片段结合在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多