使用JAXB将Marshalled对象附加到XML文件中

时间:2014-10-03 11:06:22

标签: java xml jaxb

我正处理我的项目中的一个情况,即编组一个pojo对象并将输出第一次写入XML文件,然后在同一个文件中追加具有不同值但相同节点和子节点的相同封送对象。以下是代码 -

 **Person person = new Person(personList.get(id));**
    try {
        File file = new File("D:\\file.xml");
        JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

        // output pretty printed
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        jaxbMarshaller.marshal(person, file);
        jaxbMarshaller.marshal(person, System.out);

          } catch (JAXBException e) {
        e.printStackTrace();
      }

   Output:

     file.xml created with bellow structure -

     <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
     <person>
       <country>India</country>
       <id>1</id>
       <name>Aatif Hasan</name>
     </person>

作为&#39; id&#39; in Person构造函数获取更改,下次Person对象使用不同的属性值封送&#39; file.xml&#39;文件被覆盖,我丢失了以前的输出。简单地说,我想每次在&#39; id&#39;时附加封送的Person对象。得到改变。即对象属性设置为不同的值。实施例..

     <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
     <person>
       <country>India</country>
       <id>1</id>
       <name>Aatif Hasan</name>
     </person>
     <person>
       <country>USA</country>
       <id>2</id>
       <name>ABC</name>
     </person>
     <person>
       <country>UK/country>
       <id>3</id>
       <name>XYZ</name>
     </person>
         .
         .
         .
    and so on..

请任何身体提示我如何做到这一点。任何帮助表示赞赏。我试图在stackoverflow Q / A列表中搜索类似的场景,但无法找到。

温暖的问候。!!

1 个答案:

答案 0 :(得分:2)

您需要的XML格式不正确。

我建议你把所有人都包好。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Persons", propOrder = {
    "person"
})
@XmlRootElement(name = "Persons")
public class Persons
    implements Serializable
{

    private final static long serialVersionUID = 12343L;
    @XmlElement(name = "Person", required = true)
    protected List<Person> person;

    // getter and setter

}

预期输出

<persons>
    <person>
       <country>India</country>
       <id>1</id>
       <name>Aatif Hasan</name>
    </person>
    <person>
       <country>USA</country>
       <id>2</id>
       <name>ABC</name>
    </person>
    <person>
       <country>UK/country>
       <id>3</id>
       <name>XYZ</name>
    </person>
</persons>

任何事情here都有可能将xml附加到文件中。