`
huibin
  • 浏览: 750579 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

浅谈Java开源XML工具包dom4j

    博客分类:
  • XML
阅读更多

dom4j为一个XML文档在内存中创建了一个树对象模型。 它提供了一组强大易用的API,通过XPath和XSLT来处理、操纵或者遍历XML文件,此外其中还集成了SAX、JAXP和DOM。

为了提供高度可配置的实现策略,dom4j基于接口设计。只需要提供一个DocumentFactory实现,您就可以创建您自己的XML树实现。这种设计,使得在扩展dom4j以定制您需要的特性时,能非常简单地重用dom4j的代码。

本文档将通过代码实例的方式为您提供一个dom4j的实践指南。在实验室项目中,这个开源工具包给我的工作带来了很大的便利,在这篇文章中,我将对项目中用到dom4j完成的任务做个总结,以期和互联网上的众多文档能够互相补充。

读取XML文件

一般性地读取XML文件,在dom4j中操作起来将非常简单。

public void readXMLSimple(File file) throws DocumentException{
//使用SAXReader读取XML文件
SAXReader sr = new SAXReader();
Document doc = sr.read(file);

 

//使用XPath遍历一个XML文件的结点 Element root = doc.getRootElement(); List entryList1 = root.selectNodes("entry"); //或者 List entryList2 = doc.selectNodes("/feed/entry"); }

创建一个XML文档并记录到磁盘上

创建一个XML文件,并将其写到磁盘上,也可以使用非常简介的代码来完成,假设我们将上一个代码范例中得到的entry节点的列表,插入到一个新建的XML文档中,然后使用优美的缩进格式保存在磁盘上,我们可以像下面这样编码:

public void createXMLSimple(List entries, File f)
throws FileNotFoundException,
UnsupportedEncodingException,
IOException{
Document doc = DocumentHelper.createDocument();
doc.addElement("feed");
Element root = doc.getRootElement();
Iterator i = entries.iterator();
while(i.hasNext()){
//从别的Dom中得到的Element都有其本身
//的root,所以必须创建副本才能插入另一个doc内
root.add(((Element)i.next()).createCopy());
}
FileOutputStream os = new FileOutputStream(f);
OutputFormat of = OutputFormat.createPrettyPrint();
XMLWriter xmlw = new XMLWriter(os,of);
xmlw.write(doc);
} 

读取一个根节点带有默认Namespace的XML

如果我们刚才的代码范例读取的是符合Atom1.0标准的Feed,那么,根节点带有default namespace的http://www.w3.org/2005/Atom。读取这样的XML文档稍微有点麻烦,网上的代码很多,但是很多都不好用,我总结下来,基本上没有办法像你想的那么干净。

public void treatDefaultNamespace(File f)
throws DocumentException{
SAXReader sr = new SAXReader();
Map ns = new HashMap();
ns.put("atom", "http://www.w3.org/2005/Atom");
sr.getDocumentFactory().setXPathNamespaceURIs(ns);
//Element接口支持迭代器,在这里顺便展示一下
Element root = sr.read(f).getRootElement();
Iterator i = root.elementIterator();
while(i.hasNext()){
Element e = (Element) i.next();
//一旦指定了Namespace,则使用XPath的时候必须带上
//即便是默认的Namespace也一样,不过前面那个名字
//可以尽可能写得短,编码的时候方便,比如改成a
String title = e.selectSingleNode("atom:title").getText();
System.out.println(title);
}
}

创建一个根节点带有默认Namespace的XML

创建一个带有default namespace的XML的方法,相当的tricky,因为你创建一个Element的方法有很多种,可以通过add方法,默认的建,也可以使用DocumentHelper对象来创建,不过,每种方法给你的结果都不同,往往让你大吃一惊。其他的那些方法,和得到的多种结果,大家可以在网上看,很多。我就提供一个能创建“干净”的XML的代码范例。

public void createXMLWithDefaultNamespace(List entries){
Document d = DocumentHelper.createDocument();
d.addElement("feed","http://www.w3.org/2005/Atom");
Element root = d.getRootElement();
//省略迭代entries代码
root.addElement("title").add(DocumentHelper.createCDATA(title));
root.addElement("id").add(DocumentHelper.createText(guid));
root.addElement("category").add(DocumentHelper.createText(category));
root.addElement("link").add(DocumentHelper.createText(permalink));
root.addElement("updated").add(DocumentHelper.createText(updated));
} 

最后,罗列一下上文中用到的所有对象所在的包,没有列出的在J2SE内。

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
分享到:
评论

相关推荐

    dom4j解析xml详解

    DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时的强大工具。DOM4J的最大亮点在于其简洁易用的API...

    JAVA XML dom4j-1.6.1

    Java XML dom4j-1.6.1 是一个强大的、灵活的开源库,专门用于处理XML文档。在Java Android开发中,它为开发者提供了一种高效且易于使用的API,用于XML文件的读取、写入和修改。dom4j-1.6.1.jar是这个库的二进制包,...

    java中dom4j读写XML

    Java中的DOM4J库是一个非常流行的、开源的Java XML API,它提供了强大的XML处理功能,包括XML的读取、创建、修改以及写入。DOM4J是基于DOM模型的,但相比标准的Java DOM,它提供了更加简洁和高效的API,使得开发者在...

    dom4j和jdom的jar包

    总的来说,DOM4J和JDOM都是强大的XML处理工具,它们的存在为Java开发者提供了处理XML的强大武器。在实际开发中,根据项目需求和团队成员的熟悉程度,选择合适的库能够极大地提高开发效率和代码质量。这两个库的jar包...

    java dom4j中生成xml文件

    Java DOM4J库是用于处理XML文档的一个强大的开源框架,它提供了一种简单而灵活的方式来创建、解析和操作XML文件。DOM4J这个名字中的“DOM”代表文档对象模型(Document Object Model),这是一种标准的API,用于在...

    dom4j和xpath的jar包

    DOM4J作为Java中的一个开源XML库,它提供了完整的DOM、SAX和JDOM API,同时引入了更多高级特性,如事件驱动模型和XPath支持。DOM4J的核心功能包括XML文档的创建、修改、读取和遍历。通过DOM4J,开发者可以方便地进行...

    Java的Dom4j和JDom的jar包

    Dom4j是一个开源的Java XML API,它提供了灵活且高性能的XML处理能力。相比Java内置的DOM解析器,Dom4j更加轻量级,性能更优。其主要特性包括: - 支持DOM、SAX和STAX解析器。 - 提供了XPath查询功能,便于快速定位...

    dom4j解析xml文件必备jar包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、查询和修改变得简单。DOM4J在Java社区中被广泛使用,尤其是在那些需要处理大量XML数据的应用中。这个压缩包包含了...

    j2ee11:xml02:dom4j解析

    标题中的“j2ee11:xml02:dom4j解析”指的是在J2EE 11(Java Enterprise Edition 11)环境下,对XML文档进行解析时使用了DOM4J库。DOM4J是一个Java库,它提供了丰富的API来处理XML、XPath和Java集合框架的集成。在...

    Dom4j-jar包

    Dom4j是Java的一个开源项目,它为处理XML文档提供了一种简单且高效的方法。这个jar包的引入使得开发者能够方便地解析、创建、修改和操作XML文档,极大地简化了与XML相关的开发任务。 **一、Dom4j的基本概念** 1. *...

    dom4j--java框架技术

    DOM4J因其易用性和高性能,在Java开发者中广受欢迎,是许多Java框架如Spring、Hibernate等默认的XML处理工具。本文将深入探讨DOM4J的主要特性、核心概念以及如何在实际开发中应用DOM4J进行XML操作。 1. **DOM4J简介...

    dom4j 2.1.1

    总之,DOM4J作为Java平台上的XML处理库,凭借其易用性、高性能和丰富的功能,成为了许多开发者首选的XML工具。无论是在简单的XML读写,还是复杂的XML操作和处理,DOM4J都能提供强大而灵活的支持。

    jar包Dom4j

    总结来说,DOM4J是Java开发中的一个不可或缺的工具,特别是对于处理XML文档的工作。它的灵活性、强大功能和广泛集成使其成为初学者和专业开发者在处理XML时的首选库。无论是简单的XML解析还是复杂的文档操作,DOM4J...

    Dom4j工具包

    如果这是包含Dom4j的一个工具包或者项目,那么可能是在该项目中使用了Dom4j来处理XML数据,例如配置文件、数据交换等。 总结,Dom4j是一个强大且易用的XML处理工具,广泛应用于各种Java项目中。无论是在解析、创建...

    dom4j-1.6.jar.zip

    DOM4J是一个开源的Java库,专为处理XML文档而设计。它提供了丰富的API,使得XML的读取、写入、修改和解析变得简单易行。DOM4J是基于Java DOM的,但同时也吸取了JDOM的优点,避免了它们的一些缺点,因此在性能和灵活...

    使用dom4j解析XML

    dom4j是一个强大的开源XML框架,它提供了处理XML文档的各种功能,包括解析、创建、修改等。相比W3C DOM API,dom4j的优势在于其内置的XPath支持,允许更方便地定位和操作XML文档中的节点。 **预先设置** 在使用dom4...

    dom4j工具类

    DOM4J的名字来源于“DOM for Java”,它是一个基于DOM模型的开源项目,但相比标准的Java DOM API,DOM4J具有更高的性能和更简洁的使用方式。 **1. DOM4J的核心概念** - **Document**: 在DOM4J中,Document代表整个...

    org.dom4j.jar

    总的来说,DOM4J是Java开发中处理XML不可或缺的工具,它提供了丰富的功能和良好的性能,使得XML操作变得简单而高效。当遇到“ClassNotFoundException: org.dom4j.DocumentException”这样的错误时,只需确保DOM4J库...

Global site tag (gtag.js) - Google Analytics