dom4j实现XML操作
dom4j实现XML操作
- 1.dom4j介绍
- 1.1.sax解析和dom解析
- 1.1.1.sax解析
- 1.1.2.dom解析
- 1.1.3.dom4j
- 1.1.4.XStream和Dom4j的区别
- 2.dom4j 例子( 解析XML 和 增删改 xml节点)
- 2.1.解析xml
- 2.2.增删改xml
- 2.2.1.增加新节点
- 2.2.2.删除节点
- 2.2.3.修改节点
1.dom4j介绍
1.1.sax解析和dom解析
JAVA 解析 XML 通常有两种方式,DOM 和 SAX。
1.1.1.sax解析
SAX是一种XML解析的替代方法。相比于文档对象模型DOM,SAX 是读取和操作 XML 数据的更快速、更轻量的方法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM 所必需的开销和概念跳跃。 SAX API是一个基于事件的API ,适用于处理数据流,即随着数据的流动而依次处理数据。SAX API 在其解析您的文档时发生一定事件的时候会通知您。在您对其响应时,您不作保存的数据将会 被抛弃。
1.1.2.dom解析
基于DOM解析的xml分析器是将其转换为一个对象模型的集合,用树这种数据结构对信息进行储存。通过DOM接口,应用程序可以在任何时候访问xml文档中的任何一部分数据,因此这种利用DOM接口访问的方式也被称为随机访问。
这种方式也有缺陷,因为DOM分析器将整个xml文件转换为了树存放在内存中,当文件结构较大或者数据较复杂的时候,这种方式对内存的要求就比较高,且对于结构复杂的树进行遍历也是一种非常耗时的操作。不过DOM所采用的树结构与xml存储信息的方式相吻合,同时其随机访问还可利用,所以DOM接口还是具有广泛的使用价值。
1.1.3.dom4j
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也用它来读写配置文件。
1.1.4.XStream和Dom4j的区别
XStream在处理XML文件和JavaBean对象互转时比较好,dom4j对常用的xml配置文件操作比较好点;首先,Dom4j 处理xml应该是公认的易操作、高效率,特别是对读取和修改xml文件中内容 也提供了丰富的API接口,但是在dom4j在处理XML文件和JavaBean对象互转时,会有些小麻烦,特别是 XML 文件的内容转换成对应的 JavaBean对象的情况,这时 XStream 就显得的得心应手了,除此之外,XStream还可以实现对JSon格式的完美转换,XStream比较小巧,但功能有限,不过大众型的日常操作基本够用;总的来说,如果涉及到XML文件和其它对象的转换 可以考虑下用XStream,其它情况下建议用Dom4j。
2.dom4j 例子( 解析XML 和 增删改 xml节点)
2.1.解析xml
public static String doc2String(Document document)
{
String s = “”;
try
{
//使用输出流来进行转化
ByteArrayOutputStream out = new ByteArrayOutputStream();
//使用GB2312编码
OutputFormat format = new OutputFormat(" ", true, “GB2312”);
XMLWriter writer = new XMLWriter(out, format);
writer.write(document);
s = out.toString(“GB2312”);
}catch(Exception ex)
{
ex.printStackTrace();
}
return s;
}
2.2.增删改xml
2.2.1.增加新节点
package 正式版.XML.增删改查;
import java.io.FileWriter;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Zen {
public static void main(String[] args) throws Exception {
Document doc = new SAXReader().read(“src/正式版/XML/增删改查/Humen.xml”);
Element root = doc.getRootElement();//得到根节点
Element San = root.addElement(“Hum”);//用根节点root创建一个Hum节点 – 添加节点
Element name = San.addElement(“name”);//给新的Hum创建子节点 name和age --添加子节点
Element age = San.addElement(“age”);
name.addAttribute(“id”, “003”);//给name附上属性和属性值 --添加属性
name.setText(“老胡”);//设置name标签内文本内容 --添加文本
age.setText(“20”);//设置age标签内文本内容
//这里是保存,路径相同相当于是更新内容 (文档有变动都需要此操作)
OutputFormat format = new OutputFormat();
format.setEncoding(“UTF-8”);
XMLWriter writer = new XMLWriter(new FileWriter(“src/正式版/XML/增删改查/Humen.xml”),format);
writer.write(doc);
writer.close();
System.out.println(“添加节点成功!!”);
}
}
2.2.2.删除节点
package 正式版.XML.增删改查;
import java.io.FileWriter;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Shan {
public static void main(String[] args) throws Exception {
Document doc = new SAXReader().read(“src/正式版/XML/增删改查/Humen.xml”);//得到文档
Element root = doc.getRootElement();//得到根节点
List list = root.elements();//得到根节点下的所有儿子节点【Hum】
//删节点操作
Element H= list.get(2).element(“name”);//通过第三个Hum,找到name节点
H.detach();//删除第三个Hum中的name节点(精确删节点)
Element H2= list.get(2);//得到第三个Hum节点
H2.detach();// 删除第三个Hum节点–删整个节点(诛九族)
//删属性操作 (一般不会删属性值保留属性的,如有此需求,直接修改属性值为空就好了)
Attribute arr = H.attribute(“id”);//从孙子name脑壳上找到id属性
arr.detach();//删除这个 id==003
//第二种方式 通过父节点调用remove() 可以删子节点 属性 文本 怎么方便怎么用
//这里是保存,路径相同相当于是更新内容
OutputFormat format = new OutputFormat();
format.setEncoding(“UTF-8”);
XMLWriter w = new XMLWriter(new FileWriter(“src/正式版/XML/增删改查/Humen.xml”),format);
w.write(doc);
w.close();
System.out.println(“成功”);
}
}
2.2.3.修改节点
package 正式版.XML.增删改查;
import java.io.FileWriter;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Gai {
public static void main(String[] args) throws Exception {
Document doc = new SAXReader().read(“src/正式版/XML/增删改查/Humen.xml”);//得到文档对象
Element root = doc.getRootElement();//得到根节点
List list = root.elements();//得到根节点下的所有儿子节点【Hum】
Element H= list.get(2).element(“name”);//通过第三个Hum,找到name节点
H.setName(“666”);//修改节点名称
Attribute arr = H.attribute(“id”);//从name节点找到id属性
arr.setValue(“055”);//修改id为055 -修改属性(一般不会修改属性名保留属性值,可删除属性添加属性来实现)
Element H2 = list.get(2).element(“age”);//得到老胡年龄
H2.setText(“18”);//修改age为18 -修改内容
//这里是保存,路径相同相当于是更新内容
OutputFormat format = new OutputFormat();
format.setEncoding(“UTF-8”);
XMLWriter w = new XMLWriter(new FileWriter(“src/正式版/XML/增删改查/Humen.xml”),format);
w.write(doc);
w.close();
System.out.println(“成功”);
}
}
dom4j实现XML操作相关推荐
- Dom4j工具--XML的DOM解析(下)--写操作
前言: 上一篇博客我开始了用Dom4j对XML进行了读操作,这篇博客主要是进行对XML的写操作 只涉及基础的内容,只要有javase基础和eclipse的使用 就可以完成, 往后的内容包括 " ...
- java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较(转)
java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式详解与比较(转) http://wishlife.javaeye.com/blog/181865 posted on 2010-12 ...
- dom4j读写xml文件
dom4j读写xml文件 首先我们给出一段示例程序: import java.io.File; import java.io.FileWriter; import java.util.Iterator ...
- 【学习笔记】关于DOM4J:使用DOM4J解析XML文档
一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...
- Dom4j 解析Xml文档及XPath查询 学习笔记
本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...
- DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...
Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...
- DOM4j读取XML文件(SAXReader)
为什么80%的码农都做不了架构师?>>> DOM4j读取XML文件(SAXReader) 一.一个很好的SAXReader读写xml文件的例题: 总结: Document do ...
- Dom4J 解析xml ,类查询
/*** 从XML文件比对,传入provinceId 返回 provinceShortName * @param provinceid* @return*/public static String p ...
- dom4j读取XML文件内容
转载自 dom4j读取XML文件内容 <?xml version="1.0" encoding="UTF-8"?> <RESULT> ...
最新文章
- java extend 和 implements 的区别
- Java 8 Time Api 使用指南【珍藏限量版】
- Linux查看用户所属用户组
- 天然气表怎么看多少方_宝宝奶粉的的营养成分表,到底怎么看?
- 有意思的前端函数面试题
- App-V5.0服务器部署
- Python3中遇到UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in ordinal not in range(128)
- 电脑公司Win11 64位全新旗舰版镜像V2021.08
- [web]EL表达式失效
- 行军导航过程中导向箭头
- Access数据库引擎
- python 读取并显示图片的两种方法
- 【附Python版教学】“那些年用过的奇葩辞职理由”哈哈哈,看完笑掉牙。
- 缓存和数据库刷新的顺序 及阿里OCS介绍
- 第二章(第四部分) 黑暗之王的分身
- BSN智能合约开发培训-CITA(三)
- Gym 101653T Runes (模拟)
- iOS常用第三方库大全,史上最全第三方库收集
- php实现 iso 下载文件,下载文件时safari上中文文件名乱码的处理办法(php代码实现)...
- T80 Google云端AI实验室
热门文章
- 关于STM32H743的两串口调试纪录笔记
- 特斯拉发布电动卡车:5秒破百 续航达800公里! | 行业
- 扇贝的python课程好吗_【扇贝Python面试】很简单的题目-看准网
- bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积
- 微信小程序获取滚动条高度_小程序超过高度加滚动条 小程序尺寸规范
- 你的网站其实并不安全,真实的黑客攻防事件
- Unity实现简单技能冷却管理器
- 超级好用的pycharm破译教程
- linux文件增量备份,linux 文件增量备份 用tar实现
- 【ModBus】modbus之协议的相关知识(1)