XML文档读取-DOM4j
JAXP是sun公司官方提供的java解析工具包,但很多其他企业和机构也都开发了自己的xml解析工具,甚至比JAXP更加优秀,比如DOM4J。
- Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
- Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
- 使用Dom4j开发,需下载dom4j相应的jar文件。
- Dom4j的使用可参见其所提供的文档(quick start)
DOM4J需要加入两个包:dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar
参考下载地址:http://pan.baidu.com/s/1eS3X3DS
完整代码:
package package1112; import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.IllegalAddException;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class third {
private static void find() throws DocumentException
{
//解析xml文档
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 传统解析模式,不能根据结点名称直接查找,只能一级一级的往下查
Element root = document.getRootElement();
List<Element> list =root.elements();
List<Element> list1 = list.get(1).elements();
System.out.println(list1.get(1).getText());
//输出特定节点特定属性的属性值
Element e = (Element) document.selectNodes("//comment[@id='S002']").get(0);
System.out.println(e.attributeValue("title"));
}
/**创建子节点
* @throws DocumentException
* @throws IllegalAddException
* @throws IOException
*/
private static void addElement() throws DocumentException,IllegalAddException, IOException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 使用工具类DocumentHelper创建结点
Element e = DocumentHelper.createElement("languge");
e.setText("Chinese");
e.addAttribute("bb", "boy");
// 寻找父节点
Element ee = (Element) document.selectNodes("//book").get(1);
// 添加结点至内存文档
ee.add(e);
// Writing a document to a file,可以参考dom4j的API
XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
writer.write(document);
writer.close();
} /**删除子节点
* @throws DocumentException
* @throws IOException
*/
private static void deleteElement() throws DocumentException, IOException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 读取待删除结点的父节点
Element e = (Element) document.selectNodes("//languge").get(0);
// 移除结点(内存)
e.getParent().remove(e);
// Writing a document to a file,可以参考dom4j的API
XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
writer.write(document);
writer.close();
} public static void main(String[] args) throws DocumentException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
}
}
代码解析:
总体:三个功能函数,一个主函数

功能函数1:find()
两种方式(传统方式,Xpath方式)输出特定节点的文本内容
输出特定的属性值
传统方式:
private static void find() throws DocumentException
{
//解析xml文档
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// Xpath解析模式
Element e = (Element) document.selectNodes("//title").get(1);
System.out.println(e.getText());
}
Xpath方式:
private static void find() throws DocumentException
{
//解析xml文档
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 传统解析模式,不能根据结点名称直接查找,只能一级一级的往下查
Element root = document.getRootElement();
List<Element> list =root.elements();
List<Element> list1 = list.get(1).elements();
System.out.println(list1.get(1).getText());
//输出特定节点特定属性的属性值
Element e = (Element) document.selectNodes("//comment[@id='S002']").get(0);
System.out.println(e.attributeValue("title"));
}
功能函数二: addElement()
创建新节点
private static void addElement() throws DocumentException,IllegalAddException,
IOException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 使用工具类DocumentHelper创建结点
Element e = DocumentHelper.createElement("languge");
e.setText("Chinese");
e.addAttribute("bb", "boy");
// 寻找父节点
Element ee = (Element) document.selectNodes("//book").get(1);
// 添加结点至内存文档
ee.add(e);
// Writing a document to a file,可以参考dom4j的API
XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
writer.write(document);
writer.close();
}
功能函数三:deleteElement()
删除节点
private static void deleteElement() throws DocumentException, IOException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 读取待删除结点的父节点
Element e = (Element) document.selectNodes("//languge").get(0);
// 移除结点(内存)
e.getParent().remove(e);
// Writing a document to a file,可以参考dom4j的API
XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
writer.write(document);
writer.close();
}
XML文档读取-DOM4j的更多相关文章
- 源生API解析XML文档与dom4j解析XML文档
一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...
- xml文档读取-SAX
由于dom采用的是将xml文档加载入内存进行处理的方式,如果xml文档较大,则会导致加载时间过长,效率降低的情况,因此,sun公司在JAXP中又添加了对SAX的支持: SAX,全称Simple API ...
- XML文档读取-DOM
DOM(Document Object Model),“文档对象模型”早期是为了解决不用浏览器间数据兼容问题提出的解决方案,现在已经是W3C组织推荐的处理可扩展标志语言的标准编程接口. W3C DOM ...
- java 解析XML文档
Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...
- 【XML】利用Dom4j读取XML文档以及写入XML文档
Dom4j简介 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能 ...
- Java获取XML节点总结之读取XML文档节点
dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的.要使用dom4j开发,需要下载导入dom4j相应的jar文件.官网下载:http://www. ...
- 使用dom4j解析XML文档
dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...
- 【JAVA与DOM4J实现对XML文档的CRUD操作】
一.简介 1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录: docs目录:帮助文档的目录,单击index.html: Quick s ...
- dom4j解析xml文档&保存数据的乱码问题
package itcast.dom4j; import java.io.File; import java.io.FileOutputStream; import java.io.FileWrite ...
随机推荐
- mysql将字符串转化为数字
我的字段为内容为数字,但是类型为字符串,需要使用CASE转换即可 SELECT MAX(CAST(C_id AS UNSIGNED)) INTO id 即查询出来最大的C_id,否则会按照字符串查询最 ...
- 发放福利:原价135元/年的阿里云CDN流量包(500GB)免费送
不少朋友看过本站推荐的两篇文章:1. <阿里云全民云计算活动:云服务器ECS二折起>2. <阿里云双11优惠活动-爆款云服务器> 大部分人都说不错,很快下单购买了服务器,后续使 ...
- 初识Redux-Saga
Redus-saga是一个redux的中间件,主要用来简便而优雅的处理redux应用里的副作用(side effect相对于pure function这类概念而言的).它之所以可以做到这一点主要是使用 ...
- Spring 4 MVC example with Maven
In this tutorial, we show you a Spring 4 MVC example, using Maven build tool. Technologies used : Sp ...
- 巧学DBhelper
这几天在教我很重要的人学习,她属于那种超级小白,很超级的那种. 教她的过程中 发现有的知识点 不管这么教都不会.DBhelper就是不知道怎么记. 当时我就想到 杰哥(程杰)的出的大话系列,和他写书的 ...
- 在ERP中定义用户时报错:SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间
在ERP中定义用户时. 报错: SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间. 原因分析: ①没有正确初 ...
- java 之 原型模式(大话设计模式)
原型模式,在笔者理解看来就是克隆,当我们在创建第一个对象时,已经给对象赋值完毕,此时我们需要一个当前对象的副本,如果没有原型模式,我们会再次创建一个对象,然后后二次赋值,保证两个对象完全一致, 这样我 ...
- JAVA 异常向上抛和向下抛的优劣势
向上抛: 优点:向上抛出异常,下面代码清秀: 缺点:不能直接看出抛出异常的代码: 向下抛: 优点:能直接看到出现异常的代码,方便查找,显得严谨: 缺点:代码太多: 总结:尽量向上抛,代码量减少,同意解 ...
- 《Linux命令行与shell脚本编程大全》第十九章 初识sed和gawk
这两个工具能够极大简化需要进行的数据处理任务. 19.1 文本处理 能轻松实现自动格式化.插入.修改或删除文本元素的简单命令行编辑. sed和gawk就具备上述功能 19.1.1 sed编辑器 被称为 ...
- 01.redis初识
Redis学习: redis是什么? Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 不过Redis在生产环境中使用最多的功能是缓存系统.至于其 ...