java - 如何使用 Jackson API 解析 XML?

标签 java xml rest xml-parsing jackson

我正在使用 Jackson api 来解析 xml 对象。

<BESAPI xsi:noNamespaceSchemaLocation="BESAPI.xsd">
    <Employee Resource="https://abc:52311/api/employee/100"/>
    <Employee Resource="https://abc:52311/api/employee/200"/>
    <Employee Resource="https://abc:52311/api/employee/300"/>
    <Employee Resource="https://abc:52311/api/employee/400"/>
</BESAPI>

这是xml记录的结构。我想获取所有资源的字符串列表。我如何使用 Jackson api 来实现它?

最佳答案

首先,您需要编写一些 Java 类来对 XML 内容进行建模。 类(class)获得 @JacksonXml... 注释告诉 Jackson XML 和 Java 之间的映射。 当 Java 名称与 XML 名称不同时,这些注释尤其重要。

一个类用于代表 <BESAPI>根元素:

@JacksonXmlRootElement(localName = "BESAPI")
public class BESAPI {

    @JacksonXmlProperty(isAttribute = true, localName = "noNamespaceSchemaLocation", namespace = XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI)
    private String noNamespaceSchemaLocation;

    @JacksonXmlProperty(isAttribute = false, localName = "Employee")
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<Employee> employees;

    // public getters and setters (omitted here for brevity)
}

和另一个代表 <Employee> 的类元素

public class Employee {

    @JacksonXmlProperty(isAttribute=true, localName="Resource")
    private String resource;

    // public getters and setters (omitted here for brevity)
}

然后你可以使用 Jackson 的 XmlMapper 用于读取 XML 内容。

XmlMapper xmlMapper = new XmlMapper();
File file = new File("example.xml");
BESAPI besApi = xmlMapper.readValue(file, BESAPI.class);
for (Employee employee : besApi.getEmployees()) {
    System.out.println(employee.getResource());
}

关于java - 如何使用 Jackson API 解析 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50579733/

相关文章:

java - SpringBoot-Elasticsearch BulkRequest-Add&Flush Controller 的同步

java - 多值 HashMap 值的 "Size or zero"

xml - as3 xml 检查元素是否存在

java - talend 如何在运行时处理作业的修改?

javascript - XML : Cannot call method 'getElementsByTagName' of null

php - 哪些 PHP 框架适合纯 Web 服务应用程序?

c# - 使用 DTO 时的 PATCH

java - 计算日期之间的天数

java - 无法使用线程同步进程

java - Rest + Spring AOP + 接口(interface)不注入(inject)