一、dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。

  二、dom4j的xml解析过程

  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)xml模板

<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.JsonObject;
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.xml"));
Element root = document.getRootElement();
JsonObject jsonObject = readXml(root);
JsonObject jsonObjectRepetition = readXmlRepetition(root);
Gson gson = new Gson();
System.out.println(gson.toJson(jsonObject));
System.out.println(gson.toJson(jsonObjectRepetition));
} /**
* 处理存在重复的标签数据(弊端,所有数据都是数组的方式存在,对xml的设计有要求,不然数据不好处理)
* @param root
* @return
*/
public static JsonObject readXmlRepetition(Element root) {
//获取节点下面的所有元素
List<Element> elements = root.elements();
//如果存在则处理数据或者直接返回节点数据
if (elements != null && elements.size() > 0) {
//声明一个json数据
JsonObject jsonObject = new JsonObject();
//声明一个json数组
JsonArray mList = new JsonArray();
//遍历所有元素
for (Element element:elements) {
//读取节点数据直到节点下面没有其他元素
JsonObject jo = readXml(element);
mList.add(jo);
}
//加入json
jsonObject.add(root.getName(), mList);
return jsonObject;
} else {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty(root.getName(), root.getText());
return jsonObject;
}
} /**
* 处理普通xml格式数据,不存在重复的标签(弊端,不能处理统一标签下的重复标签)
* @param root
* @return
*/
public static JsonObject readXml(Element root) {
//获取节点下面的所有元素
List<Element> elements = root.elements();
//如果存在则处理数据或者直接返回节点数据
if (elements != null && elements.size() > 0) {
//声明一个json数据
JsonObject map = new JsonObject();
//这个是处理所有下面的数据保存在一个json中
JsonObject jo = new JsonObject();
for (Element element:elements) {
JsonObject m = readXml(element);
jo.add(element.getName(), m.get(element.getName()));
}
map.add(root.getName(), jo);
return map;
} else {
JsonObject map = new JsonObject();
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)可以参考这种做法,进一步做深度解析

  四、xml的创建

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.xml");
XMLWriter xmlWriter = new XMLWriter(outputStream);
xmlWriter.write(document);
xmlWriter.close();
}

  备注:这里xml创建不细讲,很多时候都是根据业务来的。

  

Java之dom4j的简单解析和生成xml的应用的更多相关文章

  1. maven中使用dom4j解析、生成XML的简易方法

    此片文章主要写一些关于如何在maven工程中使用dom4j来解析或生成XML的建议方法,实际可使用的写法不仅限于如下所写的样例代码.此处进攻快速入手和提供思路使用. 首先配置pom.xml中的依赖的包 ...

  2. SAX解析和生成XML文档

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui031 ...

  3. 使用Pull解析器生成XML文件和读取xml文件

    有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...

  4. 使用Pull解析器生成XML文件

    有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...

  5. java使用dom4j和XPath解析XML与.net 操作XML小结

    最近研究java的dom4j包,使用 dom4j包来操作了xml 文件 包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), ...

  6. java 解析并生成 XML

    在 java 中使用 Dom4j 解析 XML 对 XML 文件的解析,通常使用的是 Dom4j 和 jdom 作为XML解析工具. 在此只介绍下 Dom4j 对 XML 文件的解析使用方法. 1. ...

  7. 【转载并整理】JAVA解析或生成xml的四种方法

    参考文章 1:http://blog.csdn.net/clemontine/article/details/53011362 2:http://www.jb51.net/article/98456. ...

  8. JavaWeb_使用dom4j解析、生成XML文件

    dom4j 官网 xml解析DOM文档对象模型(树形结构) DOM方式解析:把xml文档加载到内存形成树形结构,可以进行增删改的操作 Learn   使用dom4j解析文件"NewFile. ...

  9. Dom4j解析、生成Xml

    1以下代码未Xml的解析和生成代码 <?xml version="1.0" encoding="UTF-8"?> <users> < ...

随机推荐

  1. ongene database

    http://ongene.bioinfo-minzhao.org/index.html

  2. 详解Python中re.sub--转载

    [背景] Python中的正则表达式方面的功能,很强大. 其中就包括re.sub,实现正则的替换. 功能很强大,所以导致用法稍微有点复杂. 所以当遇到稍微复杂的用法时候,就容易犯错. 所以此处,总结一 ...

  3. 2016"百度之星" - 初赛(Astar Round2B)1003 瞬间移动 组合数学+逆元

    瞬间移动  Accepts: 1018  Submissions: 3620  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: 65536/ ...

  4. CentOS环境Docker安装教程(官方推荐的docker三种方式安装)

    CentOS环境Docker安装教程(官方推荐的docker三种方式安装) 一.使用yum方式安装 1.安装依赖包 $ sudo yum install -y yum-utils device-map ...

  5. python 执行字符串中的python代码

    mycode = 'print("hello world")' code = """ def mutiply(x,y): return x*y pri ...

  6. redis缓存穿透、缓存击穿、缓存雪崩

    缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透. 解决办法: 预校验 在控 ...

  7. iTerm2的设置和Zsh.

    很好的说明文: https://xiaozhou.net/learn-the-command-line-iterm-and-zsh-2017-06-23.html iTerm2是Mac os用户使用的 ...

  8. <p>1、查询端口号占用,根据端口查看进程信息</p>

    2017年6月份的时候,我就着手在公司推广git,首先我自己尝试搭建了GitLab来管理代码,并且通过以下博客记录了GitLab的搭建,以及GitLab备份,GitLab升级等事情. git学习——& ...

  9. 牛客网——A找一找

    链接:https://www.nowcoder.net/acm/contest/71/A来源:牛客网 题目描述 给定n个正整数,请找出其中有多少个数x满足:在这n个数中存在数y=kx,其中k为大于1的 ...

  10. JS之Iterations

    for in.for of.for each in 1.for in:用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作),for ... in 循环中的代码每执行一次,就会对数组的元素或者 ...