Java 在类结构更改后,面临解组旧xml的问题
我正在努力解组一个结构与当前对象结构不同的旧xml文件 以前的结构Java 在类结构更改后,面临解组旧xml的问题,java,xml,jaxb,unmarshalling,Java,Xml,Jaxb,Unmarshalling,我正在努力解组一个结构与当前对象结构不同的旧xml文件 以前的结构 @xmlRootElement("configData") public class configData{ private string name; private string age; private customObject obj; } 我目前的数据结构是 @xmlRootElement("configData") public class configData{ List<SampleD
@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;
}
@xmlRootElement(“configData”)
公共类configData{
列出样本数据;;
}
公共类抽样数据{
私有字符串名称;
私弦时代;
私有对象对象;
}
如何使用旧的xml文件。请帮忙
谢谢您的旧结构表明,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...
}
@XmlRootElement
公共类配置数据
{
//这将对JAXB隐藏该列表
@XmlTransient
private final List sampleDatas=new ArrayList();
私有SampleData getFirstSample()
{
if(sampleDatas.isEmpty())
添加(新的SampleData());
返回sampleDatas.get(0);
}
//将功能委托给列表第一项的Façade方法。。。
//如果您只想以旧格式读取,则只需要设置器。
//但是,如果要保存为新格式,这不是可选的。。。
公共void集合名(字符串名)
{
getFirstSample().setName(名称);
}
公共无效seAge(字符串年龄)
{
getFirstSample().setAge(年龄);
}
公共无效设置对象(自定义对象对象对象)
{
getFirstSample().setObj(obj);
}
}
公共类抽样数据
{
私有字符串名称;
私弦时代;
私有对象对象;
//访问器方法。。。
}
ConfigData中的façade setter方法将它们的值存储到列表的第一项
要提供保存的可能性,您应该删除
@xmltransive
,并为要保存的字段提供公共
getter…您可以将访问器方法委托给配置数据
,并标记列表@xmltransive
。我对JAXB映射不熟悉。在这种情况下,@xmltransive将如何提供帮助?能不能请你详细解释一下,感谢你抽出时间来解决我的问题。是的,你说得对。旧XML文件有一组示例数据。但是,除非我也复制了configData
类中的属性,否则如何获取第一个sampleData
对象中属性的值?我需要以新格式保存数据。我没有在第一个SampleData
对象中获取属性值。旧的XML文件总是空的。谢谢!!!它起作用了。我将@xmlement
注释应用于configData
类中的所有setter