You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jackson API解析XML并提取所有Resource字符串列表?

没问题,用Jackson XML API来提取所有Resource属性的字符串列表很简单,我给你一步步说明怎么实现:

实现步骤

1. 确保引入Jackson XML依赖

如果你用Maven,先在pom.xml里添加Jackson XML的依赖(Gradle用户对应调整配置即可):

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.15.2</version> <!-- 建议使用最新稳定版 -->
</dependency>

2. 创建映射XML结构的POJO类

我们需要两个简单的Java类来对应你的XML层级结构:

  • BESAPI:对应XML根节点,用来包裹多个<Employee>元素
  • Employee:对应每个<Employee>节点,专门映射Resource属性

BESAPI类

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import java.util.List;

@JacksonXmlRootElement(localName = "BESAPI")
public class BESAPI {
    // 设置useWrapping=false,因为XML里没有<Employees>这类包裹标签,直接是多个<Employee>子节点
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<Employee> employee;

    // Jackson需要Getter/Setter来完成序列化/反序列化逻辑
    public List<Employee> getEmployee() {
        return employee;
    }

    public void setEmployee(List<Employee> employee) {
        this.employee = employee;
    }
}

Employee类

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;

public class Employee {
    // 标注这是XML的属性(而非子元素)
    @JacksonXmlProperty(isAttribute = true, localName = "Resource")
    private String resource;

    // Getter/Setter
    public String getResource() {
        return resource;
    }

    public void setResource(String resource) {
        this.resource = resource;
    }
}

3. 编写解析代码

用XmlMapper读取XML内容,然后提取所有Resource的值到列表:

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.util.List;
import java.util.stream.Collectors;

public class XmlResourceParser {
    public static void main(String[] args) throws Exception {
        // 你的XML内容字符串
        String xmlContent = """
                <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>
                """;

        // 创建XmlMapper实例
        XmlMapper xmlMapper = new XmlMapper();
        // 将XML解析为BESAPI对象
        BESAPI besapi = xmlMapper.readValue(xmlContent, BESAPI.class);

        // 提取所有Resource字符串到列表
        List<String> resourceList = besapi.getEmployee()
                .stream()
                .map(Employee::getResource)
                .collect(Collectors.toList());

        // 输出验证结果
        resourceList.forEach(System.out::println);
    }
}

4. 运行结果

执行上面的代码后,控制台会输出:

https://abc:52311/api/employee/100
https://abc:52311/api/employee/200
https://abc:52311/api/employee/300
https://abc:52311/api/employee/400

额外提示

  • 如果是从文件读取XML,只需把xmlContent替换为文件路径,调用xmlMapper.readValue(new File("your-file-path.xml"), BESAPI.class)即可
  • 若XML包含复杂命名空间,需要给XmlMapper添加额外配置,但你的示例里只有schema声明,无需额外处理

内容的提问来源于stack exchange,提问作者DMS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:52:18