博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java之dom4j的简单解析和生成xml的应用
阅读量:5822 次
发布时间:2019-06-18

本文共 4356 字,大约阅读时间需要 14 分钟。

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

  二、dom4j的xml解析过程

  1)加入依赖包

org.dom4j
dom4j
2.1.0
com.google.code.gson
gson
2.8.2

  说明:gson的目的是用来将数据转成json的形式

  2)xml模板

test1
test11
test3
test4
test5
test6

  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
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
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创建不细讲,很多时候都是根据业务来的。

  

 

转载于:https://www.cnblogs.com/ll409546297/p/8302062.html

你可能感兴趣的文章
java springcloud版b2b2c社交电商spring cloud分布式微服务(十五)Springboot整合RabbitMQ...
查看>>
d3 v4实现饼状图,折线标注
查看>>
微软的云策略
查看>>
Valid Parentheses
查看>>
AIX 配置vncserver
查看>>
windows下Python 3.x图形图像处理库PIL的安装
查看>>
【IL】IL生成exe的方法
查看>>
SettingsNotePad++
查看>>
没有JS的前端:体积更小、速度更快!
查看>>
数据指标/表现度量系统(Performance Measurement System)综述
查看>>
GitHub宣布推出Electron 1.0和Devtron,并将提供无限制的私有代码库
查看>>
论模式在领域驱动设计中的重要性
查看>>
有关GitHub仓库分支的几个问题
查看>>
云原生的浪潮下,为什么运维人员适合学习Go语言?
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
Linux 目录结构及内容详解
查看>>