Java使用DOM4j解析XML与JSON互转实操
在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转换的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









