将 XML(相同标签名称)映射到 Java 对象

Map XML(of same tag name) to Java Object

我得到一个要求,我必须将我的 xml 映射到 java 对象而不解析它,但是问题就像 xml 中的标签名称一样,因为例如,

 <response>
    <employee>
    <name>Sharique</name>
    <name>24</name>
    <name>India</name>
    </employee>
    </response>

和class会像这样

public class Employee{
private String empName;
private int age;
private String country;

//getters and setters
}

请帮忙!! 如果可以使用 spring 来完成,那就太好了

不需要,按照javax.xml.bind.annotation你可以像下面那样做,

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

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

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

你那里确实有些奇怪 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 结束标记。

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