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 ...
随机推荐
- Three.js 保存camera(视角)设置到数据库,包括场景的缩放、旋转、移动等
最近在做的项目中遇到需要保存当前的3d管道视角设置的问题,用户希望在对3d场景内的管道进行了缩放.旋转.移动之后可以将场景当前的视角状态保存在数据库中,并在下次加载时读取. 经过不断的尝试和研究,在同 ...
- JavaWeb笔记一、Servlet 详解
一.创建一个 Servlet 简单实现类 1.创建一个 HelloServlet 类(测试 Servlet 接口方法) 1 //创建一个 HelloServlet 类并实现 Servlet 接口 2 ...
- eclipse导出jar(含依赖)三步走
之前用eclipse导出jar运行结果一直不尽人意,排查问题排查很久,最终确定到导出jar时,如果依赖jdk以外的jar时,就要通知eclipse 看了很多帖子,感觉操作起来都比较麻烦,注意点也比较多 ...
- 阿里云ecs初始化磁盘后远程连接不到服务器
阿里云初始化磁盘后远程连接不到服务器 报错: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! ... 原因:阿里云ecs第一次链接服务器之后会在本地电 ...
- C#实现中国身份证验证问题
C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准... 今天写的 C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准... 理论部分: 1 ...
- salesforce零基础学习(八十三)analytics:reportChart实现Dashboard(仪表盘)功能效果
项目中经常会用到Report以及Dashboard来分析汇总数据,Dashboard可以指定view as user,如果针对不同的用户需要显示其允许查看的数据,比如 根据role hierarch ...
- [转载] Java集合---HashMap源码剖析
转载自http://www.cnblogs.com/ITtangtang/p/3948406.html 一.HashMap概述 HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射 ...
- 五、VueJs 填坑日记之将接口用webpack代理到本地
上一篇博文,我们已经顺利的从cnodejs.org请求到了数据,但是大家可以注意到我们的/src/api/index.js的第一句就是: // 配置API接口地址 var root = 'https: ...
- RocketMQ集群部署配置
目标,使用2台机器部署RocketMQ多Master多Slave模式,异步复制集群模式. 第一步,修改/etc/hosts文件 192.168.116.115 rocketmq1 192.168.11 ...
- 七、VueJs 填坑日记之渲染一个列表
在上一篇博文中,我们对vue组件有了一个简单的认识和大概的理解.在之前认识项目结构的时候,我们在/src目录中创建了一个components的文件夹,而今天就要用到了,这个文件夹的作用就是放置我们的自 ...