我刚开始学习使用JAXB将我的java对象编组为XML。我对序列化对象没有问题,但现在我要做的是将一个元素插入到没有相应POJO的xml中。
例如,我有一个Folder
的列表,我想将每个Folder
放入一个名为Folders
的xml元素中。这有意义吗?我可以在适当的时候将<Folders>
和</Folders>
写入输出流,但我想以更正式的方式执行此操作。
答案 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 {
}