XML解析器——DOM4j

4)DOM4J http://dom4j.sourceforge.net

虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。

为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。

在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。

DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J.

package com.lr.utils;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.dom4j.Attribute;
import org.dom4j.Element;
import org.dom4j.io.DOMReader;
import org.dom4j.Document;
import org.xml.sax.SAXException;

import com.lr.bean.BookInfo;

public class Dom4j {
	//公有的获取 所有书本信息的方法
	@SuppressWarnings("unchecked")
	public List<BookInfo> getInfo(){
		List<BookInfo> list=new ArrayList<BookInfo>();

		try {
			//DOM解析
			DOMReader reader=new DOMReader();
			DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

			//通过文档构建器 创建一个 document 树
			Document doc=reader.read(factory.newDocumentBuilder().parse(new File("books.xml")));
			Element rootElement=doc.getRootElement();//获取根元素

			//迭代取值
			Iterator it=rootElement.elementIterator();
			Object ele;
			BookInfo bk=null;
			Element e;
			Attribute attr;

			while(it.hasNext()){	//含有子节点
				ele=it.next();

				if("book".equals(((Element) ele).getName())){	//元素名等于book
					bk=new BookInfo();

					//获取书本的所有属性
					for(Iterator attrList=((org.dom4j.Element) ele).attributeIterator();attrList.hasNext();){
						attr=(Attribute) attrList.next();
						if("id".equals(attr.getName())){
							bk.setId(attr.getValue());
						}
					}

					//获取书本的所有子节点
					for(Iterator el=((org.dom4j.Element) ele).elementIterator();el.hasNext();){
						e=(Element) el.next();
						if("bookName".equals(e.getName())){
							bk.setBookName(((org.dom4j.Element) e).getTextTrim());
						}else if("price".equals(e.getName())){
							bk.setPrice(((org.dom4j.Element) e).getTextTrim());
						}else if("bookPub".equals(e.getName())){
							bk.setBookPub(((org.dom4j.Element) e).getTextTrim());
						}
					}
				}
				list.add(bk);
			}
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}

		return list;
	}

	public static void main(String[] args){
		Dom4j d=new Dom4j();
		System.out.println(d.getInfo());
	}
}

时间: 2024-08-29 00:52:37

XML解析器——DOM4j的相关文章

XML解析器

一.操作XML文档概述 1.如何操作XML文档 XML文档也是数据的一种,对数据的操作也不外乎是"增删改查".也被大家称之为"CRUD" C:Create: R:Retrieve: U:Update: D:Delete 2.XML解析技术 XML解析方式分为两种:DOM(Document Object Model)和SAX(Simple API for XML).这两种方式不是针对Java语言来解析XML的技术,而是跨语言的解析方式.例如DOM还在Javascrip

TinyXML:一个优秀的C++ XML解析器

1. TinyXML:一个优秀的C++ XML解析器 2. http://blog.chinaunix.net/uid-23381466-id-3360201.html

常见C/C++ XML解析器比较

常见C/C++ XML解析器有tinyxml.XERCES.squashxml.xmlite.pugxml.libxml等等,这些解析器有些是支持多语言的,有些只是单纯C/C++的.如果你是第一次接触到XML解析,那么关于XML解析器的选择问题的确令人头疼,我们先看一下这些解析器有哪些特点. 一.Xerces XML解析器 官方网址:http://xerces.apache.org/xerces-c/ Xerces前身是IBM的XML4C,XML4C也是一种功能强大的XML解析器,之后交给Apa

TinyXML开源XML解析器-TinyXML-2

TinyXML-2 is a simple, small, efficient, C++ XML parser that can be easily integrating into other programs. TinyXML-2 是一个简单.小型.高效的C++ XML解析器,它可以很容易地集成到其他程序. TinyXML-1 served my needs for many years; but it uses memory inefficiently, and doesn't perfo

Duilib源码分析(三)XML解析器—CMarkup

上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI:CMarkupNode:xml节点类 先介绍CMarkup: XMLELEMENT: xml节点元素类型定义,iStart,节点元素在xml文件中的起始位置:iChild,节点元素子节点:iNext,节点元素的下一个节点(兄弟节点):iParent,节点元素的父节点:iData, 节点元素的数据. CMarku

VC环境使用XML解析器(TinyXML)编程

我是在VC下编译运行. 1.首先下载TinyXML库的文件,这里给出链接http://prdownloads.sourceforge.net/tinyxml/tinyxml_2_3_4.zip?download 2.下载后解压这个压缩包,把所有的东西放到一个找的着的地方(比如,E:\开发库\TinyXML) 3.用Visual C++(推荐VC++.NET2003)创建一个新的工程(Win32控制台) 4.在TinyXML的目录里面找到tinystr.h, tinyxml.h, tinystr.

TinyXML:一个优秀的C++ XML解析器[转]

TinyXML:一个优秀的C++ XML解析器 读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译.这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树. DOM模型即文档对象模型,是将整个文档分成多个元素(如书.章.节.段等),并

Xml的转义字符--约束-xml解析器

XML解析器:Dom适合增删改查(crud),缺点就是内存消耗大:  Sax:内存消耗非常小,解析速度快,但是不适合增删改:

XML 解析器

所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象. 解析 XML 文档为DOM对象 方法一: var xmlhttp=null; if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome xmlhttp=new XMLHttpRequest(); }else{// code for IE6, IE5 xmlhttp=new A