使用JAXB_FRAGMENT属性时,是否需要输出XML声明?

时间:2014-02-07 21:23:59

标签: java xml jaxb large-data

我需要使用JAXB将大量数据输出到XML文件。我的问题是后续问题:

Can JAXB Incrementally Marshall An Object?

在Blaise Doughan的回答中,他说首先手动编写开始的xml标签,然后是重复的元素(必须是根元素),然后是结束标记。他的示例输出到控制台(System.out)而不是文件。如果使用FileOutputStream代替;在打开xml标记之前,确保将XML声明(<?xml version="1.0" encoding="UTF-8" standalone="true"?>)写入文件的最佳方法是什么?我不认为最好的答案是手动编写它。

我回顾了以下答案:

How to stream large Files using JAXB Marshaller?

但是,我认为JAXB可以在不使用外部接口的情况下解决此问题。

1 个答案:

答案 0 :(得分:1)

如果您的对象模型适合内存并且您有一个根对象,那么JAXB可以为您编组并写出XML声明。

另一方面,如果您有大量不适合内存的对象如果由单个根对象引用,那么您需要采取不同的方式。您需要直接使用StAX或OutputStream / Writer启动文档,然后编组对象,然后自己结束文档。使用这种方法,您需要确保声明声明(StAX将为您处理)。