我想将许多对象编组到一个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();
这很好用,我得到了我期望的<object1>
和<object2>
数据......它在每个对象之前只有一个<?xml version="1.0" ?>
。
答案 0 :(得分:6)
XML文档始终具有一个根元素,因此将多个对象编组到单个文件中将不会产生有效的XML。
您应该有一个具有Object1元素和Object2元素的根对象,并封送此根对象。
否则,Marshaller API doc说:
支持的属性
[...]
jaxb.fragment - value必须是java.lang.Boolean 此属性确定Marshaller是否将生成文档级事件。如果未指定属性,则 默认为false。此属性具有不同的含义 您正在使用哪个编组api - 当此属性设置为时 真:
[...]
marshal(Object,XMLStreamWriter) - Marshaller不会生成XMLStreamConstants.START_DOCUMENT和 XMLStreamConstants.END_DOCUMENT个事件。
答案 1 :(得分:0)
我认为你应该添加像
这样的根@XmlRootElement(name = "Name")
public class EntityName {
}