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

时间:2015-01-23 07:14:19

标签: java xml spring

我有一个要求,我必须将我的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
}

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

3 个答案:

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