我有一个要求,我必须将我的xml映射到java对象而不解析它,但问题是在xml标记名称中的问题是相同的,例如,
<response>
<employee>
<name>Sharique</name>
<name>24</name>
<name>India</name>
</employee>
</response>
和类就像这样
public class Employee{
private String empName;
private int age;
private String country;
//getters and setters
}
请帮忙!! 如果可以使用弹簧来完成那将是非常好的
答案 0 :(得分:1)
如果您将EclipseLink MOXy用作JAXB(JSR-222)提供程序,那么您可以使用我们的@XmlPath
扩展名来处理此用例。
@XmlAccessorType(XmlAccessType.FIELD)
public class Employee{
@XmlPath("name[1]/text()")
private String
@XmlPath("name[2]/text()")
private int age;
@XmlPath("name[3]/text()")
private String country;
//getters and setters
}
了解更多信息
我在博客上写了更多关于@XmlPath
扩展程序的内容:
答案 1 :(得分:0)
不需要,根据javax.xml.bind.annotation,您可以执行以下操作,
@XmlElement(name="name")
private String empName;
现在,您的java类中的 empName 将映射到XML中的 name 属性。
并且您的XML不应该将“name”作为所有属性的名称。它无法区分,因此您需要在XML中使用不同的标签,例如年龄等其他元素,并按照我在POJO中的说明进行相应的映射。
答案 2 :(得分:0)
你真的有一些奇怪的XML。在这种情况下,我的数据绑定不起作用,但您可以使用data projection来完成。 (披露:我是该项目的附属机构)
public class ParseResponse {
public interface Employee {
@XBRead("./name[1]")
String getName();
@XBRead("./name[2]")
int getAge();
@XBRead("./name[3]")
String getCountry();
}
public static void main(String[] args) {
List<Employee> employees = new XBProjector().io().url("res://response.xml").evalXPath("//employee").asListOf(Employee.class);
for (Employee employee:employees) {
System.out.println(employee.getName());
System.out.println(employee.getAge());
System.out.println(employee.getCountry());
}
}
}
此程序打印出来
Sharique
24
India
如果您修复XML结束标记。