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

Java XML Jackson解析:将XML解析为对象并忽略部分元素,无需额外创建form/entry类的实现方案

无需额外创建Form/Entry类的XML解析方案

当然可以不用创建form和entry对应的Java类来完成解析!利用Jackson XML提供的树形节点操作能力,就能直接定位到目标数据节点并转换为你的ModelTrees对象,下面是具体实现步骤:

方法:通过树形节点导航解析

1. 保持(或微调)你的ModelTrees实体类

不需要对原类做太多修改,保留核心字段和Jackson注解即可:

@JsonIgnoreProperties(ignoreUnknown = true)
public class ModelTrees extends BaseEntity {
    @JacksonXmlProperty(localName = "tree_kind")
    private String treeKind;
    @JacksonXmlProperty
    private int age;

    // 别忘了添加getter、setter方法,或者用Lombok简化
    public String getTreeKind() { return treeKind; }
    public void setTreeKind(String treeKind) { this.treeKind = treeKind; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

2. 编写解析逻辑,直接定位目标节点

使用XmlMapper的树形解析能力,先将整个XML转换为XmlNode结构,再导航到entry节点,最后转换为ModelTrees对象:

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.XmlNode;

public class XmlParser {
    public static void main(String[] args) throws Exception {
        // 待解析的XML内容
        String xmlContent = "<form> <model_trees> <entry> <tree_kind>kind</tree_kind> <age>10</age> </entry> </model_trees> </form>";
        
        XmlMapper xmlMapper = new XmlMapper();
        // 读取XML为树形节点
        XmlNode rootNode = xmlMapper.readTree(xmlContent);
        // 导航到目标节点:form -> model_trees -> entry
        XmlNode entryNode = rootNode.path("form").path("model_trees").path("entry");
        // 将entry节点转换为ModelTrees对象
        ModelTrees modelTrees = xmlMapper.treeToValue(entryNode, ModelTrees.class);
        
        // 验证结果
        System.out.println("Tree kind: " + modelTrees.getTreeKind()); // 输出 kind
        System.out.println("Age: " + modelTrees.getAge()); // 输出 10
    }
}

原理说明

  • XmlMapper.readTree()会将XML解析为一个可导航的树形结构,无需提前定义所有层级的实体类;
  • path()方法可以安全地导航到指定节点(即使中间节点不存在也不会抛出异常);
  • treeToValue()负责将目标节点的XML内容直接映射到你的ModelTrees实体类,忽略其他无关节点。

注意事项

  • 确保你的项目中已经引入Jackson XML的依赖:
    <!-- Maven依赖示例 -->
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.15.2</version> <!-- 使用最新稳定版即可 -->
    </dependency>
    
  • 如果XML中entry是多个节点(比如<entry>重复出现),可以导航到model_trees节点后,遍历所有entry子节点并逐个转换为ModelTrees对象,存入List即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:42:40