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

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帮助文档及使用教程

    12. **常见问题与解决方案**:列举了一些在使用DOM4J过程中可能会遇到的问题及其解决方法。 通过阅读和实践DOM4J的帮助文档和使用教程,开发者可以全面掌握DOM4J的各种特性和用法,从而更高效地处理XML数据。这个...

    dom4j.jar 下载

    4. **使用**:在你的代码中导入DOM4J的类,如`org.dom4j.Document`、`org.dom4j.Element`等,然后使用提供的API进行XML操作。 DOM4J的核心功能包括: - **解析XML**:DOM4J支持SAX和DOM解析方式,可以根据需求选择...

    使用dom4j 和本地dom 解析xml 文件

    在Java中,解析XML文件是常见的任务,通常有DOM(Document Object Model)和DOM4J两种方式。下面我们将详细探讨这两种解析方法。 DOM解析方式是将整个XML文件加载到内存中,形成一棵DOM树,每个节点代表XML文档的一...

    dom4j学习资料_dom4j-1.6.1-API.chm

    《Dom4j的使用.doc》文档很可能是对DOM4J基本操作和常见用法的详细教程。它可能会涵盖如何创建XML文档,添加元素,设置属性,处理文本节点,以及如何使用XPath进行查询。此外,文档可能还会讲解如何解析已存在的XML...

    dom4j-1.6.1.jar

    在Java开发中,XML(eXtensible Markup Language)是数据交换和文档存储的常见格式,而dom4j-1.6.1.jar是针对Java平台的一个强大的、灵活的XML处理库。这个库提供了对XML文档的全面支持,包括读取、写入、修改以及...

    Dom4j常用jar包

    在提供的压缩包文件中,"lib"目录可能包含了Dom4j的jar文件,例如"dom4j-1.6.1.jar",这是Dom4j的一个常见版本。将其解压后导入项目,便可以开始使用Dom4j进行XML处理了。 总的来说,Dom4j作为一个强大的XML处理...

    dom4j帮助文档 + dom4j.jar + 使用案例

    这些案例可能涵盖创建XML文档、解析XML、修改XML元素、使用XPath查询等常见场景,是学习DOM4J很好的实践材料。 8. **整合其他技术**: DOM4J可以很好地与Spring、Hibernate等Java框架集成,简化XML配置文件的处理...

    dom4j详细使用用法

    DOM4j提供了多种遍历XML树的方法,最常见的是使用迭代器。例如,可以使用`elementIterator()`方法来遍历特定元素的所有实例: ```java Iterator&lt;Element&gt; iterator = root.elementIterator("foo"); while ...

    dom4j1.1-1.6.1.rar

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于“Document Object Model for Java”,但它并不仅仅是一个DOM实现,它还包含...

    dom4j-jar与dom4j解析xml文档介绍

    **PDF文档说明**:这个PDF文档可能是dom4j的官方用户指南或教程,包含了详细的API使用示例、最佳实践和常见问题解答。对于初次接触dom4j的开发者来说,这是一个宝贵的资源,可以帮助他们快速理解和掌握dom4j的使用...

    dom4j教程

    在这个教程中,我们将深入探讨DOM4J的核心概念和常见操作。 1. **XML解析**:DOM4J支持SAX和DOM两种解析方式。SAX是事件驱动的解析,适用于处理大型XML文档,因为它占用内存较少;DOM则是将整个XML文档加载到内存中...

    java.dom4j

    在实际开发中,`DOM4J下载资料.pdf`可能会包含DOM4J的使用示例、API参考、最佳实践以及常见问题解答等内容。这些资料对初学者来说非常有价值,可以帮助快速理解和掌握DOM4J的使用。 总而言之,DOM4J是Java平台上的...

    XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细

    常见的 XML 解析器有 DOM、SAX、JDOM 和 DOM4J 等。每种解析器都有其特点和优缺,选择合适的解析器对应用程序的性能和开发效率有很大影响。 1. DOM 解析器 DOM(Document Object Model)是 W3C 官方标准,用于表示...

    dom4j的属性及应用

    在实际应用中,DOM4J有以下常见的使用场景: 1. **XML文件读写**:DOM4J可以方便地读取XML文件,通过Document对象获取整个文档结构,也可以写入XML文件,构建新的XML结构。 ```java File file = new File(...

    dom4j-1.6.1.zip

    这些文档对于理解DOM4J的用法和API细节非常有帮助,开发者可以通过查阅这些文档快速学习和解决问题。 **使用DOM4J的关键概念** 1. **Element**:表示XML文档中的元素,是DOM4J中最基本的节点类型。你可以通过...

    dom4j 1.6.1 JavaDoc

    DOM4J 1.6.1的JavaDoc包含了这个库的所有类、接口、方法、构造函数及其详细说明,是开发人员理解和使用DOM4J库的重要参考资料。 以下是一些关键的知识点: 1. **Element 和 Document**: DOM4J的核心类包括`Element...

    Dom4J生成XML的完整方法希望大家能用到

    本文将深入探讨如何使用Dom4J库来创建XML文档,包括初始化文档、添加元素、设置属性、插入文本以及最终保存文档至文件系统。 #### 一、Dom4J简介 Dom4J(Document Object Model for Java)是一款开源的、轻量级的...

    dom4J JAR包

    **使用DOM4J的常见操作** 1. **读取XML文件**:使用DocumentBuilder来构建Document对象,然后可以通过Document对象获取XML文档的根元素和子元素。 2. **写入XML文件**:通过Element接口创建元素,设置属性,添加子...

    POI和dom4j需要的jar包

    在Java开发中,处理Excel文件是一项常见的任务,而Apache POI和dom4j库就是用于此目的的强大工具。Apache POI是一个开源项目,它允许Java程序员读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx、.xls...

Global site tag (gtag.js) - Google Analytics