在类结构发生变化后,解决了解组旧xml的问题

时间:2017-06-15 12:30:39

标签: 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<SampleData> sampleDatas;;

}

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

 }

如何使其与旧的xml文件一起使用。请帮忙。

由于

1 个答案:

答案 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 ...