2013-08-29 50 views
1

我有巨大的Java对象列表,想要编组没有根元素的列表,使用JAXB。有可能吗?如何使用JAXB编组带有XML根元素的java列表?

我有一个列表这样的事情

List<Element> elements = new ArrayList<Element> 

Expected Output: 
<element> 
    ---------- 
    --------- 
</element> 
<element> 
    --------- 
    --------- 
<element> 

我怎么能以这样的方式编组,

的任何参考或暗示将不胜感激。

回答

4

您可以逐个遍历整个列表中的每个项目。您需要在Marshaller上设置JAXB_FRAGMENT属性以防止XML头被写出。您只需为此用例创建JAXBContextMarshaller一次。

import java.io.FileOutputStream; 
import java.util.*; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Element.class); 
     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); 

     List<Element> elements = new ArrayList<>(); 
     elements.add(new Element()); 
     elements.add(new Element()); 

     try(FileOutputStream fos = new FileOutputStream("src/forum18509018/out.txt")) { 
      for(Element element : elements) { 
       marshaller.marshal(element, fos); 
      } 
     } 
    } 

} 
+0

感谢你的反应,我不想这样做,通过迭代列表以及它们编组到文件需要大量的时间,特别是当你有巨大的data.That的处理,为什么我要一次处理列表。有没有更好的方法来做到这一点? – user964147

+0

@ user964147 - 如果您创建了'JAXBContext'和'Marshaller',那么为什么您会预期在将列表与N个项目编组在一起并编组N个项目之间会出现性能差异? –

+0

我正在经历它,如果您编组单个条目并将它们写入文件并再次封送附加到该文件的其他条目,显然需要比将一堆数据附加到文件更多的时间。 – user964147

相关问题