如何使用JAXB编组带有XML根元素的java List?

时间:2013-08-29 10:53:47

标签: java xml jaxb

我有大量的java对象,希望使用JAXB编组没有根元素的列表。有可能吗?

我有一个类似的列表

List<Element> elements = new ArrayList<Element>

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

我怎样才能以这种方式编组,

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

1 个答案:

答案 0 :(得分:4)

您可以遍历列表,单独编组每个项目。您需要在JAXB_FRAGMENT上设置Marshaller属性,以防止写出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);
           }
        }
    }

}