`
gengu
  • 浏览: 86569 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Dom4j解析和创建XML文档

 
阅读更多

dom4j是一套开源的XML解析工具,完全支持DOM,SAX和JAXP机制,与传统的Xerces-J相比,dom4j更为简单易用,因此实际项目中往往采用它作为xml解析器。

 

dom4j只提供了java版本的,往往有很多的开源项目都使用它作为解析器比如hibernate框架。

 

dom4j支持多种解析机制:

 

DOMReader :它负责根据W3C的DOM树创建dom4j树。

SAXReader:它基于SAX解析机制来解析一份XML文档,并将其转换为dom4j树。

XPP3Reader:其底层需要依赖于XML Pull Parser 3.x来解析XML文档,并将其装换为dom4j树。

XPPReader :他是基于XML pull Parser 2.x的解析器,目前不支持注解,CDATA和处理指令。

 

 

使用dom4j解析xml文档 (代码来源《疯狂xml讲义》)

使用它来解析xml文档非常简单,在将xml文档转换成dom4j树之后,程序就可使用一致的编程模型来处理xml文档。

这里要注意的是导入包的时候一定不能出错,因为在java自己的jdk中也有

package com.gengu;

import java.io.File;
import java.util.List;

import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Attribute;

public class test1 {

	public static void main(String[] args) throws Exception{
		//创建启用DTD验证功能的SAXReader对象
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File("F:/新建文件夹/TestDom4j/src/com/gengu/Student.xml"));
		Element root = document.getRootElement();
		parse(root);
	}

	public static void parse(Element element){
		//处理当前元素包含的所有属性
		parseAttribute(element);
		//获取当前元素包含的所有子元素
		@SuppressWarnings("rawtypes")
		List el = element.elements();
		//遍历每个子元素
		for(Object e: el){
			Element element2 = (Element)e;
			if(!element2.isTextOnly()){
				parse(element2);
			}else {
				parseAttribute(element2);
				System.out.println(element2.getQName().getName()+"----->"+element2.getText());
			}
		}
		
	}
	//定义一个方法处理元素的所有属性
	public static void parseAttribute(Element ele){
		//获取Element元素的所有属性
		@SuppressWarnings("rawtypes")
		List attList = ele.attributes();
		for(Object e:attList){
			Attribute attribute = (Attribute)e;
			System.out.println(ele.getQName().getName()+"元素的"
					+attribute.getQName().getName() + "的属性知为:"
					+attribute.getValue()
					);
		}
	}
}

下面一种是使用访问者模式来遍历XML文档

dom4j的Node接口是一个根接口,它定义了一个accept(Visitor visitor)方法。

package com.gengu;

import java.io.File;
import java.io.IOException;

import org.dom4j.*;
import org.dom4j.io.XPP3Reader;
import org.xmlpull.v1.XmlPullParserException;

/**
 * 使用访问者模式遍历xml文档
 * dom4j的Node接口中定义了一个accept(Visitor visitor)方法,该方法是在node接口中定义的 
 * */
public class test3 {

	public static void main(String[] args) throws DocumentException, IOException, XmlPullParserException {
		//使用XPP3Reader来解析XML文档
		XPP3Reader reader = new XPP3Reader();
		Document document = reader.read(new File("F:/新建文件夹/TestDom4j/src/com/gengu/Student.xml"));
		document.accept(new YeekuVisitor());
	}
	
}

class YeekuVisitor extends VisitorSupport{
	//保存当前正在处理的节点
	private String currentElement;
	//当Visitor访问元素时回调该方法
	public void visit(Element node){
		//如果节点内容全部是文本
		if(node.isTextOnly()){
			System.out.println(node.getName() + "元素的信息" + node.getText());
		}
		currentElement = node.getName();
	}
	//当Visitor访问属性时回调该方法
	public void visit(Attribute node){
		System.out.println(currentElement + "元素的"
				+ node.getName() + "属性的值是:"
				+ node.getText());
	}
	//当Visitor访问处理指令的时候回调该方法
	public void visit(ProcessingInstruction node){
		System.out.println("处理指令"
				+ node.getTarget() + "的内容是:"
				+ node.getText());
	}
}

 至于什么时候访问者模式,我讲在模式博客中仔细描述。

 

使用dom4j创建xml文档

使用dom4j创建xml文档,也很简单,只需要记住基本的Element,attribute即可。一个实例如下

package com.gengu;

import java.io.FileWriter;
import java.io.IOException;

import org.dom4j.*;
import org.dom4j.io.HTMLWriter;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class test2 {

	public static void main(String[] args) throws IOException {
		//创建一个DocumentFactory duixiang 
		DocumentFactory factory = new DocumentFactory();
		//创建一个Document对象
		Document document = factory.createDocument();
		//向Document对象中添加一个处理指令节点
		//document.addProcessingInstruction("crazyit", "website=\"http://www.crazyit.org\"");
		//向doc中添加根节点元素
		Element root = document.addElement("书籍列表");
		//采用循环的方式添加四个子元素
		for(int i = 0 ;i<4;i++){
			//创建一个计算机书籍子元素
			Element pcBook = root.addElement("计算机书籍");
			//添加一个随机数作为isbn的属性
			Element name = pcBook.addElement("名字");
			name.setText("编程思想");
			
		}
		
		OutputFormat  format = new OutputFormat("   ",true,"gbk");
		//FileWriter fwFileWriter = new FileWriter("F:/book.XHTML");
		FileWriter fw = new FileWriter("F:/book.xml");
		//定义一份XLWriter对象
		//HTMLWriter writer = new HTMLWriter(fw, format);
		XMLWriter writer = new XMLWriter(fw,format);
		writer.write(document);
		fw.close();
	}
}

 以上就是使用dom4j解析和创建XML文档,当然也可以处理成HTMLWriter,的以输出XHTML格式的。

 

总之,使用dom4j解析XML数据是一件非常简单的事情,它的操作很固定。

 

 

分享到:
评论

相关推荐

    Dom4j解析和生成XML文档

    DOM4J解析XML文档: DOM4J通过构建DOM树(Document Object Model)来解析XML。DOM模型是一种将XML文档转换为内存中对象树的表示方式。在DOM4J中,我们可以使用`DocumentBuilderFactory`和`DocumentBuilder`来创建`...

    dom4j解析xml详解

    - **文档生成**: 当需要根据业务逻辑动态生成XML文档时,DOM4J的创建功能十分有用。 #### 四、结语 DOM4J作为一款成熟且强大的XML解析库,不仅提供了丰富的接口和功能,还拥有良好的性能和社区支持。对于任何需要...

    dom4j解析xml文件的压缩包

    5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析方式适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存。 6. **Namespace支持**:DOM4J提供了对XML命名空间的全面...

    dom4j解析及生成 xml代码收集

    解析XML文件后,DOM4J会构建一个`Document`对象树,你可以通过这个树来访问和操作XML的所有元素。 - **Element对象**:`Element`是XML文档中的节点,相当于HTML的`&lt;tag&gt;`。DOM4J提供了丰富的API来操作元素,如获取...

    dom4j---xml解析jar包

    在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行的、功能强大的开放源代码库。这个库不仅简化了XML处理,还提供了XPath和XSLT的支持,使其成为Java开发者处理XML的首选工具之一。 **...

    分别使用DOM和DOM4j解析XML文件

    使用DOM解析XML的基本步骤如下: 1. 创建DocumentBuilderFactory实例。 2. 使用DocumentBuilderFactory创建DocumentBuilder实例。 3. 使用DocumentBuilder的parse()方法解析XML文件,得到Document对象。 4. 通过...

    dom4j 解析(读取) xml 节点数据

    要开始解析XML文件,首先需要导入DOM4J的相关包: ```java import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; ``` 接下来,我们将创建...

    dom4j解析和创建xml简单实例

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而直观的API,使得XML的解析、创建、修改变得轻而易举。...对于初学者来说,理解并熟练掌握DOM4J和XPath是提升XML处理能力的关键步骤。

    dom4j 解析写入xml

    1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件

    使用dom4j和jaxen解析xml

    在Java开发中,dom4j和jaxen是两个常用的库,用于解析和操作XML文档。 **dom4j** 是一个非常灵活且功能强大的Java XML API,它提供了全面的XML解决方案,包括XML的读取、写入、修改以及XPath查询等功能。dom4j的...

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

    在压缩包文件"复件 dom"中,可能包含了示例代码或教程,用于演示如何使用DOM4J和本地DOM解析XML文件。通过查看这些文件,你可以更深入地了解两种方法的具体实现,并在实际项目中选择合适的方式处理XML数据。 总结来...

    利用Dom4j生成XML和解析XML

    在本文中,我们将学习如何使用 Dom4j 生成 XML 文档和解析 XML 文档。 生成 XML 文档 使用 Dom4j 生成 XML 文档非常简单。首先,我们需要创建一个 Document 对象,然后添加元素和属性。下面是一个生成 XML 文档的...

    使用Dom4j解析复杂的XML文件

    使用Dom4j解析XML文件,首先需要创建一个`SAXReader`对象,然后调用其`read()`方法读取XML文件。例如: ```java SAXReader reader = new SAXReader(); Document document = reader.read(new File("path_to_xml_...

    xmldom4j解析

    在“jar包执行20190331.rar”文件中,可能包含了一个Java项目,该项目使用DOM4J库解析XML文件并执行相关业务逻辑。执行此类项目通常涉及以下步骤: 1. 将jar包解压,找到主类(包含main方法)。 2. 使用Java命令行...

    dom4j解析xml文件(增删改查)

    在提供的视频资源"17-dom4j解析xml文档(增删改查).avi"中,可能详细展示了这些操作的步骤和示例,观看该视频将进一步加深你对DOM4J操作XML的理解。记得实践是检验理论的最好方式,动手操作会让你更好地掌握这些知识...

    dom4j解析XML所需jar包

    4. **XML文档构建**:DOM4J允许动态构建XML文档,通过`DocumentFactory`可以创建XML元素,并逐层添加子元素和属性,构建复杂的XML结构。 5. **XML文档操作**:DOM4J提供了丰富的API,如添加、删除、移动和复制XML...

    DOM4J 解析XML

    在解析XML时,DOM4J有两种主要的解析方式:SAX和DOM。SAX是一种基于事件的解析器,适用于处理大型XML文档,因为它不会将整个文档加载到内存中。DOM,即文档对象模型,会构建一个完整的XML树,适合小型或中等大小的...

    Java使用sax、dom、dom4j解析xml文档

    Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...

Global site tag (gtag.js) - Google Analytics