我有用于将Java对象编写为XML的代码
public void convToXML(SampleClass sample,File file){
try {
JAXBContext jaxbContext = JAXBContext.newInstance(SampleClass .class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(trans, file);
jaxbMarshaller.marshal(trans, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
我还有一个在循环中生成对象的系统,但是这个方法只打印XML文件中的最新对象。我如何使它按顺序打印XML根元素而不是每次都写一个新的?
在向循环中的对象添加属性
后,我调用此方法while(condition){
SampleClass sample = new SampleClass();
sample.setName("Sample");
sample.setId("432");
convToXML(sample)
}
我的System.out
显示正确数量的XML对象,而文件只显示最新的。为什么是这样?马歇尔电话在一起。 。 。
答案 0 :(得分:1)
确保在开始循环之前文件不存在;
对于marshaller,给FileOutputStream
启用追加;
这是您的工作代码问题:
File file = ...;
public void convToXML(SampleClass sample, File file){
try{
JAXBContext jaxbContext = JAXBContext.newInstance(SampleClass.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(trans, new FileOutputStream(file, true));
jaxbMarshaller.marshal(trans, System.out);
}catch(JAXBException e){
e.printStackTrace();
}
}
file.delete();
while(condition){
SampleClass sample = new SampleClass();
sample.setName("Sample");
sample.setId("432");
convToXML(sample, file)
}