将 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
扩展的内容:
我得到一个要求,我必须将我的 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
扩展的内容: