将XML(具有相同标记名称)映射到Java Object

我有一个要求,我必须将我的xml映射到java对象而不解析它,但问题是在xml标签名称中的问题是相同的,例如,

  Sharique 24 India   

和class级会是这样的

 public class Employee{ private String empName; private int age; private String country; //getters and setters } 

请帮忙!! 如果它可以使用弹簧完成,那将是非常好的

如果您将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扩展的文章:

不需要,根据javax.xml.bind.annotation你可以这样做,

 @XmlElement(name="name") private String empName; 

所以现在java类中的empName将映射到XML中的name属性。

并且您的XML不应该将“name”作为所有属性的名称。 它无法区分,因此您需要在XML中使用不同的标签,例如年龄等其他元素,并相应地映射,如我在您的POJO中所述。

你真的有一些奇怪的XML。 在这种情况下,事物数据绑定无济于事,但您可以使用数据投影来完成 。 (披露:我是该项目的附属机构)

 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 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结束标记。