如何使用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
相关产品推荐
相关产品推荐

