我正在努力解组一个旧的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 :(得分:0)
您的旧结构表明,XML文件中只存在一组SampleData
所以你应该尝试这样的事情:
@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...
}
ConfigData中的façadesetter方法将其值存储到List的第一个项目中。
为了提供保存的可能性,您应该移除@XmlTransient
,并为要保存的字段提供public
个getter ...