2012-01-20 69 views
4

我想將許多對象編組爲一個單獨的xml文件。除了我的編組堅持要在每個對象之前添加額外的<?xml version="1.0" ?>之外,這一切進展順利。JAXB將許多對象編組爲一個文件

  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(); 

這個偉大的工程,我也得到了<object1><object2>數據我希望......它只是每個對象之前的附加<?xml version="1.0" ?>

回答

6

XML文檔始終有一個根元素,因此將多個對象編組爲單個文件不會導致有效的XML。

您應該有一個帶有Object1元素和Object2元素的根對象,並編組此根對象。

否則,Marshaller API doc說:

支持的屬性

[...]

jaxb.fragment - 值必須是java.lang.Boolean 此屬性決定是否Marshaller不會生成文檔級事件。如果沒有指定該屬性,則默認爲 。此屬性取決於 上的編組API使用的是不同的含義 - 當此屬性設置爲 真:

[...]

元帥(對象,XMLStreamWriter) - Marshaller不會產生XMLStreamConstants中.START_DOCUMENT和 XMLStreamConstants.END_DOCUMENT事件。

+0

根你如何獲得一個根對象? – anon58192932

0

我想你應該添加像

@XmlRootElement(name = "Name") 
public class EntityName { 

}