JAXB将许多对象编组到一个文件中

Ril*_*ark 4 java xml jaxb xml-serialization marshalling

我想将许多对象编组到一个xml文件中.这很顺利,除了我的marshaller坚持<?xml version="1.0" ?>在每个对象之前添加额外的东西.

  1. 将许多对象编组到同一文件中的首选方法是什么?
  2. 如果没有别的,什么是摆脱这些无关的xml声明的最佳方法?

我目前的代码:

JAXBContext jc = JAXBContext.newInstance(relevantClasses);
Marshaller m = jc.createMarshaller();

XMLOutputFactory xof = XMLOutputFactory.newFactory();
XMLStreamWriter xsw = xof.createXMLStreamWriter(Channels.newOutputStream(fileWriteChannel), "UTF-8");

xsw.writeStartDocument("UTF-8", "1");

m.marshal(object1, xsw);
m.marshal(object2, xsw);

xsw.close();
Run Code Online (Sandbox Code Playgroud)

这个伟大的工程,我也得到了<object1><object2>我预期的数据...它只是有一个额外的<?xml version="1.0" ?>每一个对象之前.

JB *_*zet 6

XML文档始终具有一个根元素,因此将多个对象编组到单个文件将不会导致有效的XML.

您应该有一个具有Object1元素和Object2元素的根对象,并封送此根对象.

否则,Marshaller API文档说:

支持的属性

[...]

jaxb.fragment - value必须是java.lang.Boolean此属性确定Marshaller是否生成文档级事件.如果未指定该属性,则默认值为false.此属性具有不同的含义,具体取决于您使用的marshal api - 当此属性设置为true时:

[...]

marshal(Object,XMLStreamWriter) - Marshaller不会生成XMLStreamConstants.START_DOCUMENT和XMLStreamConstants.END_DOCUMENT事件.