【问题标题】:Map XML(of same tag name) to Java Object将 XML(具有相同标签名称)映射到 Java 对象
【发布时间】:2023-11-21 13:29:01
【问题描述】:

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

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

【问题讨论】:

  • 阅读有关 jaxb 的信息。这就是你要找的。​​span>
  • 你能给我一些关于这个的链接吗......这会很有帮助,我们可以使用 spring 来实现这个吗??
  • 创建您的 xml 的 xml 架构,然后使用 xjc 命令 [可与 jdk 一起使用] 生成等效的 java 类。生成类后,您可以使用 jaxb marshaller 和 unmarshaller 从 xml 获取对象,反之亦然。你可以在谷歌上找到很多例子。

标签: java xml spring


【解决方案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 扩展的文章:

【讨论】:

  • 非常感谢先生,真的帮了大忙!!
【解决方案2】:

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

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

所以现在您的 java 类中的 empName 将映射到您的 XML 中的 name 属性。

并且您的 XML 不应将“名称”作为所有属性的名称。它无法区分,因此您需要在 XML 中为其他元素(例如年龄等)使用不同的标签,如我在您的 POJO 中所述,相应地映射。

【讨论】:

  • 但这就是挑战所在......这就是我的要求,因为我得到的 xml 响应仅采用这种格式
【解决方案3】:

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

【讨论】: