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 ...
随机推荐
- 一款超好用轻量级JS框架——Zepto.js(下)
前 言 絮叨絮叨 前面和大家分享了Zepto的原型方法,相信大家也对这个框架有了一定的了解,那么今天再和大家分享一下它的对象方法吧! 1add() 支持一到二个参数,第一个为选择器,与$() ...
- Python模块:paramiko
paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实. 1.下载安装 Wi ...
- Jquery判断Checkbox是否选中三种方法
方法一:if ($("#checkbox-id")get(0).checked) { // do something} 方法二:if($('#checkbox-id').is ...
- Linux命令学习备忘
格式: 命令:原理:实践及截图 1.su <user> 执行该命令,需要输入password,它是<user>中定义的用户的password,即,要变换成的用户的passw ...
- intel服务器cpu命名规则
我们以E3.E5.E7系列进行一个详细解析.首先,Intel E3.E5.E7代表了3个不同档次的至强CPU,至强"E系列"的这种命名方式有些类似桌面上的Core i3,i5,i7 ...
- 翻译连载 | 附录 A:Transducing(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
- linux服务器上Apache配置多域名
一, 打开httpd.conf 二 找到如下三个位置配置如下 DocumentRoot "/data" #以下这个配置是紧挨着的,有两个 <Directory "/ ...
- MVC Code First(数据模型实例讲解)
首先配置好web.config <connectionStrings> <add name="BookDbContext" connectionString=&q ...
- 关于mysql插入数据异常
今天创建数据库时,在插入数据时出现了几个问题.(首次在LInux环境下创建数据库) 一个是关于SQL Error [1146] [42S02]: Table 'struts2exec.s_user' ...
- [ 面试没回答上的问题2]IOS上给body绑定click事件的bug
面试被问到ios上的bug,自己提到绑定click事件的bug,但是并没有把问题讲的很清楚,这里再清理一下思路. 这个bug只在IOS上有,包括ihone,ipad,由于ios浏览器都用的safari ...