我有以下xml:
Company.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<company>
<employeeList>
<employee name="Jane Doe" id="A">
</employee>
<employee name="John Smith" id="B">
</employee>
<employee name="Anne Jones" id="C">
</employee>
</employeeList>
</company>
Department.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<departmentList>
<departmentList>
<department name="Dev" id="1">
<employee>A</employee>
<employee>B</employee>
</department>
<department name="Sales" id="2">
<employee>C</employee>
</department>
</departmentList>
</departmentList>
类Department.java有一个员工清单
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Department {
@XmlAttribute
private String id;
@XmlElement(name="employee")
@XmlJavaTypeAdapter(EmpAdapter.class)
public List<Employee> employeeList;
public Department(){
employeeList = new ArrayList<Employee>();
}
并且employee.java类具有带@XmlId标记的id属性。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Employee {
@XmlAttribute
@XmlID
private String id;
我知道如何使用适配器从department对象获取employee对象。但是,如果首先解组了Company.xml文件,因为它中包含员工详细信息。
所以我想要的是能够首先解组Department.xml并让它创建一些占位符,这样一旦解压了Company.xml,就会填写department对象中的employeeList。
修改
可能的解决方案:正如@laune所建议的,我可以使用适配器创建Employee对象作为占位符,然后在解组员工列表后,在部门下的员工对象中填写这些详细信息类
我需要什么: 但是这种方式我必须始终通过代码和新方法单独处理每个案例。主要问题是我无法预测解组将发生的顺序。有没有办法让JAXB unmarshall而不用担心创建对象的依赖关系和排序?也许使用架构?
答案 0 :(得分:0)
您可以修改EmpAdapter以返回从(附加)构造函数创建的占位符Employee对象
public Employee( String id ){
this.id = id;
}
此外,EmpAdapter应该为员工维护Map<String,Employee>
映射ID。
将员工解组为平面列表后,迭代列表并从列表元素中填充占位符(通过地图定位)的字段。
如果员工数据包含deparment id,事情会容易得多。