一、dom4j是一个Java的 API,是jdom的升级品,用来读写 文件的。dom4j是一个十分优秀的Java API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写 ,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。
二、dom4j的 解析过程
1)加入依赖包
<dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency>
说明:gson的目的是用来将数据转成json的形式
2) 模板
<root> <test1>test1</test1> <test1>test11</test1> <test2> <test3>test3</test3> <test4>test4</test4> </test2> <test2> <test3>test5</test3> <test4>test6</test4> </test2></root>
3)解析
import com.google.gson.Gson;import com.google.gson.JsonArray;import com.google.gson.Json ;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;import java.io.File;import java.util.List;public class Dom4jUtil { public static void main(String[] args) throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read(new File("d:\1. ")); Element root = document.getRootElement(); Json json = read (root); Json json Repetition = read Repetition(root); Gson gson = new Gson(); System.out.println(gson.toJson(json )); System.out.println(gson.toJson(json Repetition)); } /** * 处理存在重复的标签数据(弊端,所有数据都是数组的方式存在,对 的设计有要求,不然数据不好处理) * @param root * @return */ public static Json read Repetition(Element root) { //获取节点下面的所有元素 List<Element> elements = root.elements(); //如果存在则处理数据或者直接返回节点数据 if (elements != null && elements.size() > 0) { //声明一个json数据 Json json = new Json (); //声明一个json数组 JsonArray mList = new JsonArray(); //遍历所有元素 for (Element element:elements) { //读取节点数据直到节点下面没有其他元素 Json jo = read (element); mList.add(jo); } //加入json json .add(root.getName(), mList); return json ; } else { Json json = new Json (); json .addProperty(root.getName(), root.getText()); return json ; } } /** * 处理普通 格式数据,不存在重复的标签(弊端,不能处理统一标签下的重复标签) * @param root * @return */ public static Json read (Element root) { //获取节点下面的所有元素 List<Element> elements = root.elements(); //如果存在则处理数据或者直接返回节点数据 if (elements != null && elements.size() > 0) { //声明一个json数据 Json map = new Json (); //这个是处理所有下面的数据保存在一个json中 Json jo = new Json (); for (Element element:elements) { Json m = read (element); jo.add(element.getName(), m.get(element.getName())); } map.add(root.getName(), jo); return map; } else { Json map = new Json (); map.addProperty(root.getName(), root.getText()); return map; } }}
4)测试结果展示
{"root":{"test1":"test11","test2":{"test3":"test5","test4":"test6"}}}{"root":[{"test1":"test1"},{"test1":"test11"},{"test2":{"test3":"test3","test4":"test4"}},{"test2":{"test3":"test5","test4":"test6"}}]}三、重点说明一下
1)上面写出来的工具,基本上都是用来处理特定数据的工具
2)方法的实现上面还可以完善,但是我一直没有找到好的数据表现形式所以写了两个方法
3)可以参考这种做法,进一步做深度解析
四、 的创建
public static void main(String[] args) throws Exception { Document document = DocumentHelper.createDocument(); Element root = document.addElement("root"); Element test1 = root.addElement("test1"); test1.addText("test1"); Element test2 = root.addElement("test2"); test2.addText("test2"); OutputStream outputStream = new FileOutputStream("d:\2. "); Writer Writer = new Writer(outputStream); Writer.write(document); Writer.close(); }
备注:这里 创建不细讲,很多时候都是根据业务来的。
继续阅读与本文标签相同的文章
上一篇 :
Java之POI的excel导入导出
下一篇 :
idea激活方式
-
lodash中Collection部分所有方法的总结
2026-05-26栏目: 教程
-
HTTP-点开浏览器输入网址背后发生的那点事
2026-05-26栏目: 教程
-
MySQL-主从复制
2026-05-26栏目: 教程
-
MySQL-Xtrabackup备份还原
2026-05-26栏目: 教程
-
MySQL-备份与还原
2026-05-26栏目: 教程
