JAXB:使用ArrayList .add()方法后更新XML文件

时间:2014-04-20 13:21:49

标签: java xml jaxb

我有一个简单的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元素结束。

我真正想要的是彼此之间有多个记录,但我没有达到这个目标!

请帮忙!

1 个答案:

答案 0 :(得分:0)

我希望你现在能够解决这个问题。

jaxbMarshaller.marshal( r ,XMLfile); --- r总是一个元素。

jaxbMarshaller.marshal( crecords ,XMLfile); - crecords是你想要的arraylist。

这回答了吗?