Java使用DOM4j解析XML与JSON互转实操

周叙
周叙
发布时间:2026-10-16| 5人浏览过
原创

在Java开发中,处理结构化数据常涉及XML解析与JSON转换。DOM4j是解析XML的高效工具,支持基于节点的递归读取与XPath精准定位;而JSON转换则可通过阿里Fastjson或Google Gson实现,两者均能便捷地完成对象与字符串间的互转。

1. XML解析基础

Java生态中常见的XML解析技术包括DOM、SAX、JDOM和DOM4j。其中DOM4j因性能优异且API简洁,成为实际项目中的首选方案之一。本文将通过DOM4j演示如何读取本地XML文件并提取关键信息。

第1步:准备XML数据源

首先,构建一个包含层级结构的XML文件 book.xml 作为测试数据:

?xml version="1.0" encoding="utf-8?>

	
		金苹果
		锄禾日当午
	
	
		银苹果
		苹果很幸苦
	

第2步:使用DOM4j进行节点遍历

通过 SAXReader 加载文件,获取文档根节点后,可利用 elements() 和 attributeValue() 等方法提取属性与文本内容。此方法适合标签结构已知或需批量处理的场景。

public class Demo1 {
   public static void main(String[] args) throws IOException, DocumentException {
       // 获取输入流
       FileInputStream fis = new FileInputStream("javaSE/src/com/practise/xml_json/book.xml");
       // 创建xml的读取对象
       SAXReader reader = new SAXReader();
       // 读取xml文件
       Document document = reader.read(fis);
       // 获取根节点对象
       Element root = document.getRootElement();
       // 获取根节点的名字
       List books = root.elements();
       // 遍历获取第二个节点
       for (int i = 0; i < books.size(); i++) {
           Element book = books.get(i);
           System.out.println(book.attributeValue("id"));
           System.out.println(book.elementTextTrim("name"));
           System.out.println(book.elementTextTrim("info"));
       }
       fis.close();
   }
}

执行上述代码后,控制台将按序输出每本书的ID、名称及简介信息:

第3步:利用XPath进行精准查询

对于深层嵌套或条件筛选需求,XPath能显著减少代码量。常用路径符号说明:

  • / :表示从根节点开始查找
  • // :从当前节点查找所有后代节点
  • @ :选择属性,如 [@id='1']
public class XpathDemo {
    public static void main(String[] args) throws FileNotFoundException, DocumentException {
        FileInputStream fis = new FileInputStream("javaSE/src/com/practise/xml_json/book.xml");
        SAXReader read = new SAXReader();
        Document document = read.read(fis);
        
        // 1. 查找所有的name节点
        List names = document.selectNodes("//name");
        for (Node name : names) {
            System.out.println(name.getName() + ":" + name.getText());
        }

        // 2. 获取指定id为'1'的book下的name节点
        Node node = document.selectSingleNode("//book[@id='1']//name");
        System.out.println(node.getName() + ":" + node.getText());
    }
}

2. Java对象与JSON转换

现代Web开发中JSON已取代XML成为主流数据交换格式。Java领域内,Fastjson(阿里开源)与Gson(Google开源)是最常用的两款转换库。下面以简化的 Book 实体类为例,展示两者的典型用法:

public class Book {
    private int id;
    private String name;
    private String info;
    // ... 构造函数与getter/setter省略
}

第4步:使用Fastjson进行转换

Fastjson提供了静态方法入口,无需实例化即可直接调用。注意JSON字符串的双引号需正确转义,以免引发语法异常。

public class FastJsonDemo {
    public static void main(String[] args) {
        // 对象 -> JSON字符串
        System.out.println(JSON.toJSON(new Book(1001, "水浒传", "武松打虎")));

        // JSON字符串 -> 对象
        Book book = JSON.parseObject("{\"id\":1001,\"name\":\"水浒传\",\"info\":\"武松打虎\"}", Book.class);
        System.out.println(book.getName());
    }
}

运行结果如下所示,显示转换后的JSON字符串及反序列化出的对象字段值:

第5步:使用Gson进行转换

Gson采用构造器模式创建实例,API风格相对更贴近原生Java面向对象思维,在处理复杂泛型时表现稳定。

public class JsonDemo1 {
    public static void main(String[] args) {
        Gson gson = new Gson();
        Book book = new Book(1001, "水浒传", "武松打虎");
        
        // 对象 -> JSON字符串
        String s = gson.toJson(book);
        System.out.println(s);

        // JSON字符串 -> 对象
        System.out.println(gson.fromJson(s, Book.class));
    }
}

终端输出验证了Gson对实体类的序列化与反序列化过程:

3. 总结

掌握DOM4j能高效解决传统XML文件的读写难题,结合XPath可进一步提升检索精度。而在JSON处理方面,无论是追求轻量级的Fastjson还是注重稳定性的Gson,都能满足常规的项目转化需求。开发者可根据团队技术栈偏好选择合适的工具。

以上就是Java解析xml文件和json转换的详细内容,更多关于Java XML解析与JSON转换的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。