当前位置: 首页 > news >正文

Dom4j

DOM4J即Document Object Model for Java使用java技术以文档方式解析XML数据的模型。

DOM4J是开源组织提供的一个免费的、强大的XML解析工具,如果开发者需要在项目中使用那么需要下载并引入jar包。

dom4j is an Open Source XML framework for Java. dom4j allows you to read, write, navigate, create and modify XML documents. dom4j integrates with DOM and SAX and is seamlessly integrated with full XPath support

下载:http://sourceforge.net/projects/dom4j

引入:dom4j-1.6.1.jar (核心包)、 jaxen-1.1-beta-6.jar(Xpath支持包)

 如何去学习一个开源的工具包?

一般的开源工具中都提供了免费的API文件,开发者可以参考该文档。

DOM4J提供的文档中有一个免费教程可以直接使用。->Quickstart

  开始解析

1. 准备需要解析的xml文件linkmans.xml

 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 2 <linkmans>
 3     <linkman>
 4         <name>jack</name>
 5         <phone>18663243245</phone>
 6         <email>jack@163.com</email>
 7     </linkman>
 8     <linkman>
 9         <name>张三</name>
10         <phone>1353243247</phone>
11         <email>zs@126.com</email>
12     </linkman>
13 </linkmans>

2. 获取解析器

1 // 2.获取解析器
2     public static SAXReader getReader(){
3         return new SAXReader();
4     }

3. 获取解析对象

1 // 3.获取解析好的文档对象
2     public static Document getDocument(File file)throws Exception{
3         // 3.1获取解析器
4         SAXReader reader = getReader();
5         // 3.2解析文档
6         Document doc = reader.read(file);
7         return doc;
8     }

4. 获取根元素节点

 1     // 4.获取根元素
 2     public static void getRoot(File file)throws Exception{
 3         // 4.1获取解析器
 4         SAXReader reader = getReader();
 5         // 4.2解析文档
 6         Document doc = reader.read(file);
 7         // 4.3获取根元素
 8         Element root = doc.getRootElement();
 9         System.out.println(root.getName());
10     }

5. 获取指定的其他的元素

获取其他元素的时候默认需要从根节点开始查找。

 1     // 5.获取指定的元素
 2     public static void getElement(File file) throws Exception {
 3         // 5.1获取解析器
 4         SAXReader reader = getReader();
 5         // 5.2解析文档
 6         Document doc = reader.read(file);
 7         // 5.3获取根元素
 8         Element root = doc.getRootElement();
 9         // 5.4获取所有的linkman
10         List list = root.elements("linkman");
11         Iterator it = list.iterator();
12         // 5.5循环遍历节点
13         while (it.hasNext()) {
14             Element ele = (Element) it.next();
15             System.out.println(ele.getName());
16         }
17         System.out.println("---------------");
18         // 简化
19         for (Iterator i = root.elementIterator(); i.hasNext();) {
20             Element element = (Element) i.next();
21             System.out.println(element.getName());
22         }
23         // 5.6获取第二个linkman的名字
24         Element linkman2 = (Element) list.get(1);
25         String name = linkman2.element("name").getText();
26         System.out.println(name);
27     }

6. 添加元素

 1 // 6. 添加元素
 2     public static Document addElement(File file)throws Exception{
 3         // 6.1获取解析器
 4         SAXReader reader = getReader();
 5         // 6.2解析文档
 6         Document doc = reader.read(file);
 7         // 6.3获取根元素
 8         Element root = doc.getRootElement();
 9         // 6.4创建新元素
10         Element new_linkman = DocumentHelper.createElement("linkman");
11         Element new_name = DocumentHelper.createElement("name");
12         Element new_phone = DocumentHelper.createElement("phone");
13         Element new_email = DocumentHelper.createElement("email");
14         
15         new_name.setText("焦宁波");
16         new_phone.setText("186xxxxxxxxx");
17         new_email.setText("jnb@itcast.cn");
18         // 6.5建立关系
19         new_linkman.add(new_name);
20         new_linkman.add(new_phone);
21         new_linkman.add(new_email);
22         root.add(new_linkman);
23         return doc;
24     }

7. 修改的document需要进行持久化的操作,因此需要提供以下的方法

 1 // 提供一个工具方法将内存中的Document写入XML文件
 2     public static void writeDocument2XML(Document doc, File file)throws Exception{
 3        // 创建创建一个转换对象
 4        XMLWriter writer = new XMLWriter(
 5         // 可以解决输入的数据时中文的乱码问题
 6 new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));
 7        // 将doc写入指定文件
 8        writer.write(doc);
 9        // 释放资源
10        writer.close();
11     }

8. 修改元素

 1     // 8. 修改元素
 2     public static Document modifyElement(File file) throws Exception {
 3         // 8.1获取解析器
 4         SAXReader reader = getReader();
 5         // 8.2解析文档
 6         Document doc = reader.read(file);
 7         // 8.3获取根元素
 8         Element root = doc.getRootElement();
 9         // 8.4直接获取第二个linkman的name
10         Element name = 
11 ((Element)root.elements("linkman").get(1)).element("name");
12         name.setText("李四");
13         return doc;
14     }

9. 删除元素

 1 // 9. 删除元素
 2     public static Document removeAll(File file)throws Exception{
 3         // 9.1获取解析器
 4         SAXReader reader = getReader();
 5         // 9.2解析文档
 6         Document doc = reader.read(file);
 7         // 9.3获取根元素
 8         Element root = doc.getRootElement();
 9         // 9.4获取所有的linkman
10         List list = root.elements("linkman");
11         // 9.4循环断绝关系
12         for(Object temp :list){
13            // 转型
14            Element linkman = (Element)temp;
15            // 断绝关系
16            root.remove(linkman);
17         }
18         return doc;
19     }

10. 属性的操作

 1     // 10. 属性操作
 2     public static Document optionAttribute(File file)throws Exception{
 3         // 10.1获取解析器
 4         SAXReader reader = getReader();
 5         // 10.2解析文档
 6         Document doc = reader.read(file);
 7         // 10.3获取根元素
 8         Element root = doc.getRootElement();
 9         // 10.4获取所有的linkman
10         List list = root.elements("linkman");
11         // 10.4循环添加属性
12         int count = 0;
13         for(Object temp :list){
14            // 转型
15            Element linkman = (Element)temp;
16            // 添加属性
17            linkman.add(DocumentHelper.createAttribute(linkman, 
18 "id", "00"+(count+1)));
19            count++;
20         }
21         // 10.5获取焦宁波的id
22         Element linkman3 = (Element) list.get(2);
23         String value = linkman3.attribute("id").getText();
24         System.out.println(value);
25         // 10.6修改属性
26         linkman3.attribute("id").setText("007");
27         // 10.7删除属性
28         linkman3.remove(linkman3.attribute("id"));
29         return doc;
30     }    

 

 

 

 

转载于:https://www.cnblogs.com/friends-wf/p/3725642.html

相关文章:

  • Java基础work4
  • NIO入门系列之第9章:字符集
  • 新语言学习
  • Leetcode | Permutations II
  • C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息
  • 跳前端坑前,先看看这个!!
  • AWR报告导出
  • Outlook 2010如何更改脱机缓存数据OST文件位置?
  • read和write函数
  • mysql数据库开发规范
  • iOS开发UI篇—字典转模型
  • 金蝶kis记账王云盘版怎么安装与注册
  • cocos2d-x中Node中重要的属性
  • Linux磁盘知识,分区与文件系统
  • mysql-5.5.36.tar.gz 在rhel 6.5上的编译安装
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 【前端学习】-粗谈选择器
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Babel配置的不完全指南
  • ECS应用管理最佳实践
  • node和express搭建代理服务器(源码)
  • scrapy学习之路4(itemloder的使用)
  • v-if和v-for连用出现的问题
  • yii2权限控制rbac之rule详细讲解
  • yii2中session跨域名的问题
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 如何利用MongoDB打造TOP榜小程序
  • 设计模式 开闭原则
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 为视图添加丝滑的水波纹
  • 一些关于Rust在2019年的思考
  • 再次简单明了总结flex布局,一看就懂...
  • 最近的计划
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • #FPGA(基础知识)
  • (145)光线追踪距离场柔和阴影
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET 服务 ServiceController
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .Net接口调试与案例
  • .net经典笔试题
  • .net中应用SQL缓存(实例使用)
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [17]JAVAEE-HTTP协议
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [Bugku]密码???[writeup]