繁体   English   中英

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

[英]JAXB: Updating XML file after using ArrayList .add() method

我有一个简单的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列表中的一个元素保存在xml文件中。

我真正想要的是在彼此之间有多个记录,但是我没有实现这一目标!

请帮忙!

希望您现在已经解决了这个问题。

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

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

这个答案吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM