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
相关产品推荐
相关产品推荐

