gpt4 book ai didi

java - 如何使用 JAXB 编写多个 XML 根元素

转载 作者:行者123 更新时间:2023-11-30 08:04:42 25 4
gpt4 key购买 nike

我有这段代码用于将 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 对象,而文件仅显示最新的。为什么是这样?编码(marshal)的电话是在一起的。 。 。 .

最佳答案

在开始循环之前确保文件不存在;

对于编码器,提供启用附加功能的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)
}

关于java - 如何使用 JAXB 编写多个 XML 根元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31306217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com