我有一个简单的Java应用程序,它会要求用户插入客户详细信息,然后将这些保存到ArrayList。我想使用JAXB XML解析器将此ArrayList存储到XML文件中。在我的代码中的某个点上,我从用户那里获得输入并使用ArrayList .add()方法保存该输入。
在完成一些教程并实现JAXB代码后,结果发现只保存了一条记录,并在插入新数据后覆盖了这条记录。
到目前为止,我的应用程序中有3个类:
CustomerRecord.java - 这是我插入XML注释的类
import java.util.Scanner;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlType(propOrder = { "name", "surname"})
public class CustomerRecord {
private String name;
private String surname;
private String cellular;
public String getName(){
return name;
}
public String getSurname(){
return surname;
}
@XmlAttribute
public String getCellular(){
return cellular;
}
public void setName(String name){
this.name = name;
}
public void setSurname(String surname){
this.surname = surname;
}
public void setCellular(String cellular){
this.cellular = cellular;
}
App.java - 这是我保存xml文件的类。
public void addCustomer(){
CustomerRecord r = new CustomerRecord();
r.insertCustomerDetails();
crecords.add(r);
try{
JAXBContext jaxbContext = JAXBContext.newInstance(CustomerRecord.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
File XMLfile = new File("e:\\storage.xml");
jaxbMarshaller.marshal(r, XMLfile);
} catch (JAXBException e){
//TODO Catch block
e.printStackTrace();
}
}
现在我得到的结果是:
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<customerRecord cellular="356 99606060">
<name>John</name>
<surname>Doe</surname>
</customerRecord>
如果插入新数据,上面的xml文件将被覆盖而不是在其下面有新记录,并且我最终总是使用保存在xml文件中的一个arraylist元素结束。
我真正想要的是彼此之间有多个记录,但我没有达到这个目标!
请帮忙!
答案 0 :(得分:0)
我希望你现在能够解决这个问题。
jaxbMarshaller.marshal( r ,XMLfile); --- r总是一个元素。
jaxbMarshaller.marshal( crecords ,XMLfile); - crecords是你想要的arraylist。
这回答了吗?