`
wangxinxin1212
  • 浏览: 29004 次
社区版块
存档分类
最新评论

dom4j 使用及常见问题

    博客分类:
  • java
阅读更多

相信作为一个开发人员应该对XML与JSON 非常熟悉。关于两者的介绍与区别网上已经有很多资料,java对于XML的解析也有很多工具包,主要解析的方式有三种:

1.DOM解析方式:适用于解析小型XML文件,如果操作大型XML文件,将整个Docment读入内存可能会引起内存不足。

2.SAX解析方式:对内存占用较小,适合解析大型XML文件,说白了就是扫描解析。

3.Digester/JAXB: Struts 的 XML 解析工具 Digester。

 

本文主要介绍dom4j的使用,dom4j中已经整合了SAX方式。使用dom4j可以应对大型XML文件的操作。对于Digester笔者没有过多的接触,这里就不做过多的说明。

下面来看dom4j的使用。

 

一.登录官网http://www.dom4j.org/

如果找不到下载位置可以去github下载 (http://dom4j.github.io/

笔者使用的是1.6版本(最新版本截至发稿已更新至2.0)

 

二.将下载的压缩包解压。会看到(dom4j-1.6.1.jar)包,将jar包导入工程便可。

 

三.简单的读写操作,以下是操作代码:

public class XMLTest {
	String fileName = "d:/test/test.xml";
	@Test
	public void testWriteXML(){
		try {
			OutputFormat format = OutputFormat.createPrettyPrint();//创建格式化类
			format.setEncoding("UTF-8");//设置编码
			format.setIndent(true);//是否缩进
			format.setNewlines(true);//是否换行
			XMLWriter xmlWriter = new XMLWriter(new FileWriter(fileName), format);
			//如果需要设置文件编码格式,则需要使用一下方式创建writer   (1)
			//xmlWriter = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File(fileName)), "UTF-8"), format);
			Document document = DocumentHelper.createDocument();//通过DocumentHelper工具类创建document
			Element root = document.addElement("root");
			root.addElement("item").addAttribute("type", "t").addText("text");
			xmlWriter.write(document);
			xmlWriter.close();//一定要关闭 (2)
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
//	@Test
	public void testReadXML(){//将XML文件一次性读取
		SAXReader reader = new SAXReader();
		try {
			Document document = reader.read(new FileReader(fileName));
			Element root = document.getRootElement();
			for(Iterator<?> i = root.elementIterator(); i.hasNext();){//遍历节点
				Element ele = (Element) i.next();
				System.out.println(ele.asXML());
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}

        @Test
	public void testWriteXML1(){//写入较大XML文件时,建议使用以下方式
		try {
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("UTF-8");//设置编码
			format.setIndent(true);//是否缩进
			format.setNewlines(true);//是否换行
			XMLWriter xmlWriter = new XMLWriter(new FileWriter(fileName), format);
			Document document = DocumentHelper.createDocument();//通过DocumentHelper工具类创建document
			xmlWriter.write(document);
			Element root = document.addElement("root");
			Element item = DocumentHelper.createElement("item");
			xmlWriter.writeOpen(root);//准备写入
			for(int i=0;i<1000000;i++){
				item.addAttribute("type", "type"+i).addText("text"+i);
				item.setParent(root);
				xmlWriter.write(item);//写入节点
				item.clearContent();//清空节点属性
			}
			xmlWriter.writeClose(root);//写入完成
			xmlWriter.close();//一定要关闭
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	@Test
	public void testSAXReader(){//扫描方式读取XML文件,需要实现ElementPath 接口,在该接口中进行逻辑处理
		SAXReader reader = new SAXReader();
		reader.setDefaultHandler(new ElementHandler() {
			@Override
			public void onStart(ElementPath elementPath) {
				Element element = elementPath.getCurrent();
				if("item".equals(element.getName())){
					System.out.println(element.attributeValue("type"));
					System.out.println(element.getText());//没有获取Text值(3)
				}
			}
			
			@Override
			public void onEnd(ElementPath elementPath) {
				Element element = elementPath.getCurrent();
				if("item".equals(element.getName())){
					System.out.println(element.attributeValue("type"));
					System.out.println(element.getText());
				}
			}
		});
		try {
			reader.read(new FileReader(fileName));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
}

 四:注意事项:

(1):生成XML文件编码,如果有中文需要注意此处配置。

(2):一定记得关闭write。

(3):ElementHandler接口,需要实现onStart(初始化操作),onEnd方法(处理逻辑),这里注意在onStart方法中将无法获得节点的Text值(可能是没有读完操作)。

 

注明:如果需要更详细的介绍,请参考官方文档

参考:http://www.ibm.com/developerworks/cn/xml/dm-1208gub/

 

0
1
分享到:
评论

相关推荐

    我写的几个dom4j的入门例子.rar

    我写的几个dom4j的入门例子,有关读和写的常见功能。

    常见xml解析方法,document,dom4j

    常见xml解析方法,里面含有解析需要的jar文件,SAX 解析器,

    java解析xml文件的开发包dom4j.jar

    DOM4J性能最好,连Sun的JAXM也在用DOM4J.目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.

    常见的jar包整理ant.jar dom4j-1.6.1.jar jxl.jar

    经常写代码,常见的jar我简单做了下整理,希望能给大家有所帮助。包括:ant.jar dom4j-1.6.1.jar jxl.jar mail.jar mysql-connector-java-5.0.8-bin.jar pdfbox-0.7.3.jar poi-3.5-beta1.jar

    java开发常见jar包

    这里面是java开发常见的一些jar包,工程中导入它们可以满足很多很常见的功能的需求。希望对大家有帮助!

    HBase视频教程下载|基于微博数据应用的HBase实战开发

    课时29:基于dom4j进行数据文件解析 课时30:数据层设计与实现之二级索引开发 课时31:数据层设计与实现之二级索引开发(续) 课时32:Spring集成Solrj之入门操作 课时33:Spring集成Solrj之高级操作 课时34:高亮...

    达内java培训目录

    XML XML语法、XML解析(SAX、DOM)、Dom4j组件、Digester组件。 熟练掌握XML语法规则;理解DOM模型;熟悉Java对XML的各种解析方式。 实训项目三:T-DMS V2项目开发 第四阶段(以T-NetCTOSS电信计费系统贯穿) ...

    中文版PHP使用手册

    51. 安装常见问题 52. 编译问题 53. 使用 PHP 54. PHP 和 HTML 55. PHP 和 COM 56. PHP 和其它语言 57. 从 PHP/FI 2 移植到 PHP 3 58. 从 PHP 3 移植到 PHP 4 59. 从 PHP 4 移植到 PHP 5 60. 杂类问题 IX. 附录 A. ...

    20个最常见的jQuery面试问题及答案

    毫无疑问,jQuery给了JavaScript急需的提振,这是一门如此有用,但同时总是常常被低估的语言. 在 jQuery 粉墨登场之前,我们曾经会写出冗长的... 因为 jQuery 相对较新,大多数面试所涉及的问题都是围绕核心的 j

    Http_API_Tester

    描述: Http_API_Tester是基于DiggerPlus上分享过的unirest的HTTP请求库实现的,它是一个常见的基于HTTP协议的接口测试需求相关的小工具及框架。...关于JAVA代码实现的接口测试工具,建议的第三方库有:dom4j(用于解

    使用CSS3来实现滚动视差效果的教程

    在web设计中,最常见的实现视差效果的方式是使用jQuery插件。但这种方法有一些弊端。这些插件大多都是在window对象的scroll事件上放置监听器。这会导致JavaScript需要处理大量的事件触发(处理scroll事件很容易造成...

    JAVA 范例大全 光盘 资源

    实例105 DOM4j解析XML文件 278 实例106 JDOM解析XML文件 285 实例107 DOM解析XML文件 292 实例108 SAX解析XML文件 297 实例109 W3C解析XML文件 301 第13章 Java网络编程 306 实例110 获取IP地址和域名 306 ...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    4.DOM则为脚本和对象的交流提供一个公共平台,并将结果显示在浏览器窗口。 如果任何一个部分发生错误,都不会得到正确结果。 好了,看到这里,我们已经对XML是如何工作的有一个整体的大致的概念。通过这一章的...

    stateless-[removed]JavaScript追求小状态

    无状态JavaScript实用程序TL / DR:多年来,我发现使用JavaScript的工具箱... 因此,在Rails中常见的是使用Turbolinks或将DOM的一部分替换为javascript响应,例如 $ ( '.my-element' ) . replaceWith ( '&lt;&#37;= j

    大数据培训课程安排.pdf

    主要技术包括:JavaScript、Jquery、注解反射⼀起使⽤,XML以及XML解析、解析dom4j、jxab、jdk8.0新特性、SVN、 Maven、easyui 4. 描述如下: 前两个阶段的基础上化静为动,可以实现让我们⽹页内容更加的丰富,当然...

    PHP函数参考手册大全

    51. 安装常见问题 52. 编译问题 53. 使用 PHP 54. PHP 和 HTML 55. PHP 和 COM 56. PHP 和其它语言 57. 从 PHP/FI 2 移植到 PHP 3 58. 从 PHP 3 移植到 PHP 4 59. 从 PHP 4 移植到 PHP 5 60. 杂类问题 IX. 附录 A. ...

    经典收藏最全php5.0查询手册

    51. 安装常见问题 52. 编译问题 53. 使用 PHP 54. PHP 和 HTML 55. PHP 和 COM 56. PHP 和其它语言 57. 从 PHP/FI 2 移植到 PHP 3 58. 从 PHP 3 移植到 PHP 4 59. 从 PHP 4 移植到 PHP 5 60. 杂类问题 IX. 附录 A. ...

    php手册PHP5研究室编无乱码版本chm

    51. 安装常见问题 52. 编译问题 53. 使用 PHP 54. PHP 和 HTML 55. PHP 和 COM 56. PHP 和其它语言 57. 从 PHP/FI 2 移植到 PHP 3 58. 从 PHP 3 移植到 PHP 4 59. 从 PHP 4 移植到 PHP 5 60. 杂类问题 IX....

Global site tag (gtag.js) - Google Analytics