2014-10-03 69 views
3

我處於項目中編組pojo對象並首次將輸出寫入到XMLfile中,然後將具有不同值的相同編組對象附加到同一節點和子節點中同一個文件。這是下面的代碼 -使用JAXB將管理對象附加到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> 

正如人構造函數中的「ID」被改變,下一次的Person對象被不同的屬性值封送的「file.xml」文件被覆蓋,我失去了以前的輸出。簡單地說,我想每次'id'被更改時追加編組的Person對象。即對象屬性被設置爲不同的值。 Ex ..

 <?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

你可以使用一個列表。 – Hannes 2014-10-03 11:12:14

+0

您可以嘗試設置jaxb.fragment選項,並在調用marshall時使用文件輸入流。 – YMomb 2014-10-03 11:37:53

+1

但是XML的例子是無效的。你需要有一個根節點。 – YMomb 2014-10-03 13:13:10

回答

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到文件中。

+1

嗨@Xstian,你的建議工作。尊重和感謝。 – Aatif 2014-10-03 17:13:32

+0

很高興幫助你:) – Xstian 2014-10-03 18:42:36