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 ...
随机推荐
- 如何实现border-width:0.5px;
工作中遇到了一个产品需求,要求把列表分割线改成0.5px,直接写成border:0.5px solid #cccccc;是不符合规范的写法,会存在Android和IOS手机上的兼容问题,故,我们可以利 ...
- 数据库之Oracle——初级
世上岂无千里马,人中难得九方皋: 酒船鱼网归来是,花落故溪深一篙. 关于数据库的第一篇博客,这是我的第二次,人生第二春,什么也不想说,静静的开始吧,至于为什么写唐诗,请看第一篇文章! Oracle 初 ...
- Owin中间件动手玩
摘要:本文目的是了解Owin基本原理.讲述如何从控制台创建一个自宿主的OwinHost,然后再编写一两个中间件 准备工作 首先通过VisualStudio创建一个控制台应用 然后添加Owin的Nuge ...
- [转载] 谷歌技术"三宝"之BigTable
转载自http://blog.csdn.net/opennaive/article/details/7532589 2006年的OSDI有两篇google的论文,分别是BigTable和Chubby. ...
- 使用JavaScript生成二维码教程-附qrcodejs中文文档
使用javascript生成二维码 依赖jquery 需要使用到的库 https://github.com/davidshimjs/qrcodejs DIV <div id="qrco ...
- Failed to call ScheduleShutdown in logind, proceeding with immediate shutdown: Access denied
装了fedora23后定时关机:sudo shutdown -h +60 弹出如下信息后立刻就关机了: Failed to call ScheduleShutdown in logind, proce ...
- better-scroll 实现tab栏目滑动当前高亮始终在可视区
https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/#better-scroll better-scroll文档地址 如图 ,是我们要实现的 ...
- SpringMVC 视图解析器
SpringMVC 视图解析器 还记得SpringMVC 快速入门中,dispatcher-servlet.xml 配置的视图解析器么.它是SpringMVC 的核心知识点.本章节比较简单,明白视图解 ...
- 《java.util.concurrent 包源码阅读》02 关于java.util.concurrent.atomic包
Aomic数据类型有四种类型:AomicBoolean, AomicInteger, AomicLong, 和AomicReferrence(针对Object的)以及它们的数组类型, 还有一个特殊的A ...
- 【笔记】web 的回流与重绘及优化
最近看了幕课网 web 前端性能优化的课程,其中说到了浏览器的回流(reflow) 及 重绘(repaint).觉得以后面试或许会被问到所以做一下笔记: 课程从回流及重绘这两个点延伸出了一个知识点就是 ...