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操作相关推荐

  1. Dom4j工具--XML的DOM解析(下)--写操作

    前言: 上一篇博客我开始了用Dom4j对XML进行了读操作,这篇博客主要是进行对XML的写操作 只涉及基础的内容,只要有javase基础和eclipse的使用 就可以完成, 往后的内容包括 " ...

  2. java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较(转)

    java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式详解与比较(转) http://wishlife.javaeye.com/blog/181865 posted on 2010-12 ...

  3. dom4j读写xml文件

    dom4j读写xml文件 首先我们给出一段示例程序: import java.io.File; import java.io.FileWriter; import java.util.Iterator ...

  4. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

  5. Dom4j 解析Xml文档及XPath查询 学习笔记

    本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...

  6. DOM4J解析XML文档、Document对象、节点对象节点对象属性、将文档写入XML文件(详细)...

    Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM开发的.与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了 ...

  7. DOM4j读取XML文件(SAXReader)

    为什么80%的码农都做不了架构师?>>>    DOM4j读取XML文件(SAXReader) 一.一个很好的SAXReader读写xml文件的例题: 总结: Document do ...

  8. Dom4J 解析xml ,类查询

    /*** 从XML文件比对,传入provinceId 返回 provinceShortName * @param provinceid* @return*/public static String p ...

  9. dom4j读取XML文件内容

    转载自  dom4j读取XML文件内容 <?xml version="1.0" encoding="UTF-8"?> <RESULT> ...

最新文章

  1. java extend 和 implements 的区别
  2. Java 8 Time Api 使用指南【珍藏限量版】
  3. Linux查看用户所属用户组
  4. 天然气表怎么看多少方_宝宝奶粉的的营养成分表,到底怎么看?
  5. 有意思的前端函数面试题
  6. App-V5.0服务器部署
  7. Python3中遇到UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in ordinal not in range(128)
  8. 电脑公司Win11 64位全新旗舰版镜像V2021.08
  9. [web]EL表达式失效
  10. 行军导航过程中导向箭头
  11. Access数据库引擎
  12. python 读取并显示图片的两种方法
  13. 【附Python版教学】“那些年用过的奇葩辞职理由”哈哈哈,看完笑掉牙。
  14. 缓存和数据库刷新的顺序 及阿里OCS介绍
  15. 第二章(第四部分) 黑暗之王的分身
  16. BSN智能合约开发培训-CITA(三)
  17. Gym 101653T Runes (模拟)
  18. iOS常用第三方库大全,史上最全第三方库收集
  19. php实现 iso 下载文件,下载文件时safari上中文文件名乱码的处理办法(php代码实现)...
  20. T80 Google云端AI实验室

热门文章

  1. 关于STM32H743的两串口调试纪录笔记
  2. 特斯拉发布电动卡车:5秒破百 续航达800公里! | 行业
  3. 扇贝的python课程好吗_【扇贝Python面试】很简单的题目-看准网
  4. bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积
  5. 微信小程序获取滚动条高度_小程序超过高度加滚动条 小程序尺寸规范
  6. 你的网站其实并不安全,真实的黑客攻防事件
  7. Unity实现简单技能冷却管理器
  8. 超级好用的pycharm破译教程
  9. linux文件增量备份,linux 文件增量备份 用tar实现
  10. 【ModBus】modbus之协议的相关知识(1)