Ril*_*ark 4 java xml jaxb xml-serialization marshalling
我想将许多对象编组到一个xml文件中.这很顺利,除了我的marshaller坚持<?xml version="1.0" ?>在每个对象之前添加额外的东西.
我目前的代码:
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" ?>每一个对象之前.
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事件.