将XML(具有相同标记名)映射到Java对象

将XML(具有相同标记名)映射到Java对象,java,xml,spring,Java,Xml,Spring,我需要将xml映射到java对象,而不进行解析,但问题是xml中的标记名是相同的,例如 <response> <employee> <name>Sharique</name> <name>24</name> <name>India</name> </employee> </response> 请帮忙!! 如果可以使用sprin

我需要将xml映射到java对象,而不进行解析,但问题是xml中的标记名是相同的,例如

 <response>
    <employee>
    <name>Sharique</name>
    <name>24</name>
    <name>India</name>
    </employee>
    </response>
请帮忙!!
如果可以使用spring完成,那将非常好

不需要,根据javax.xml.bind.annotation,您可以像下面这样做

@XmlElement(name="name")
    private String empName;
因此,现在java类中的empName将映射到XML中的name属性


您的XML不应该将“name”作为所有属性的名称。它无法区分,因此您需要在XML中为其他元素(如年龄等)使用不同的标记,正如我在上面的POJO中所述。我认为数据绑定在这种情况下没有帮助,但您可以使用。(披露:我对该项目表示支持)


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


了解jaxb。这就是你想要的。你能给我提供一些关于这方面的链接吗?wud会很有帮助,我们可以使用spring来实现这一点吗?创建xml的xml模式,然后使用xjc命令[jdk提供]来生成相应的java类。生成类后,可以使用jaxb封送器和解封器从xml获取对象,反之亦然。你可以在谷歌上找到很多例子。但这就是挑战所在…这就是我的要求,因为我得到的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<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
@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
}