2017-06-15 45 views
0

我很努力解組一箇舊的XML文件,其結構不同於我目前的對象結構。面臨的問題解組舊的XML,類結構改變後

上一頁結構

@xmlRootElement("configData") 
public class configData{ 
private string name; 
private string age; 
private customObject obj; 
} 

我目前的數據結構是

@xmlRootElement("configData") 
public class configData{ 
    List<SampleData> sampleDatas;; 

} 

public class SampleData{ 
    private string name; 
    private string age; 
    private customObject obj; 

} 

如何使之與舊的xml文件的工作。請幫忙。

感謝

+0

你可以委託存取方法'configData',並標記列表'@ XmlTransient' ... –

+0

我是JAXB映射的新手。 ** @ xmlTransient **在這種情況下如何提供幫助?請您詳細說明一下 –

回答

0

你的舊結構表明,只有一組的SampleData的XML文件中存在。
所以,你應該嘗試是這樣的:在ConfigData店thier到列表的第一項值

@XmlRootElement 
public class ConfigData 
{ 
    // This will hide the list from JAXB 
    @XmlTransient 
    private final List<SampleData> sampleDatas = new ArrayList<>(); 

    private SampleData getFirstSample() 
    { 
    if(sampleDatas.isEmpty()) 
     sampleDatas.add(new SampleData()); 
    return sampleDatas.get(0); 
    } 

    // Façade methods to delegate functionality to the list's first item... 
    // Only setters are required, if you just want to read in an old format. 
    // However this would not be optional, if you want to save to the new format... 
    public void setName(String name) 
    { 
    getFirstSample().setName(name); 
    } 

    public void seAge(String age) 
    { 
    getFirstSample().setAge(age); 
    } 

    public void setObj(CustomObject obj) 
    { 
    getFirstSample().setObj(obj); 
    } 
} 

public class SampleData 
{ 
    private String name; 
    private String age; 
    private CustomObject obj; 
    // Accessor methods... 
} 

外牆setter方法。

提供了可能保存,你應該刪除@XmlTransient,並提供public干將你要保存的田...

+0

感謝您花時間解決我的問題。你是對的。舊的XML文件有一組樣本數據。但是,除非我複製'configData'類中的屬性,否則我將如何獲取第一個'sampleData'對象中的屬性值?我需要以新格式保存數據。 –

+0

我沒有在我的第一個'SampleData'對象中獲取屬性值。舊的XML文件始終爲空。 –

+0

謝謝!它正在工作。我將'@ xmlElement'註釋應用於'configData'類中的所有setter –