将XML(具有相同标记名)映射到Java对象
我需要将xml映射到java对象,而不进行解析,但问题是xml中的标记名是相同的,例如将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
<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
扩展的内容:
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
}