使用JAXB存根元素的简单方法?

时间:2011-12-06 20:19:03

标签: java jaxb

我刚开始学习使用JAXB将我的java对象编组为XML。我对序列化对象没有问题,但现在我要做的是将一个元素插入到没有相应POJO的xml中。

例如,我有一个Folder的列表,我想将每个Folder放入一个名为Folders的xml元素中。这有意义吗?我可以在适当的时候将<Folders></Folders>写入输出流,但我想以更正式的方式执行此操作。

1 个答案:

答案 0 :(得分:1)

您可以将JAXB与StAX一起使用来执行此操作。使用XMLStreamWriter将有助于形式化与XML的交互,并使您能够更好地控制编码这样的内容:

package forum8406266;

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamWriter;

public class Demo {

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

        List<Folder> folders = new ArrayList<Folder>(3);
        folders.add(new Folder());
        folders.add(new Folder());
        folders.add(new Folder());

        XMLOutputFactory xof = XMLOutputFactory.newFactory();
        XMLStreamWriter xsw = xof.createXMLStreamWriter(System.out);
        xsw.writeStartDocument();
        xsw.writeStartElement("Folders");

        for(Folder folder : folders) {
            marshaller.marshal(folder, xsw);
        }

        xsw.writeEndElement();
        xsw.writeEndDocument();
        xsw.flush();
    }

}

上述代码假定您的Folder课程使用@XmlRootElement进行了注释:

package forum8406266;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="Folder")
public class Folder {

}