面临的问题解组旧的XML,类结构改变后

问题描述:

我很努力解组一个旧的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 **在这种情况下如何提供帮助?请您详细说明一下 –

你的旧结构表明,只有一组的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 –