浅谈Java开源XML工具包dom4j

2016-02-19 19:02 13 1 收藏

下面图老师小编要跟大家分享浅谈Java开源XML工具包dom4j,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - Web开发 】

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  为了提供高度可配置的实现策略,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;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

来源:http://www.tulaoshi.com/n/20160219/1619853.html

延伸阅读
标签: 布艺diy 布艺
全机缝的一个工具包,容量也够大,放剪刀小尺什么的足够了。做每一个工具包前都觉得应该是物有所用的,可实际做了很多个,出门一个也没用过。不知道你是否也有同感呢?这个工具包又是很粉嫩的色系,觉得暖暖明媚,适合这个季节用吧。很少在拉链头上做装饰,一时兴起,觉得很好玩,布球握在手里的感觉也让人觉得很惬意。 ...
这个胖嘟嘟粉嫩的可爱手提泡芙工具包,看上去很温暖,很适合这个寒冷的季节,有木有?这个泡芙包的特点是只有一个提手,提起来很像一个手提包,包包的盖子是手工刺绣的花朵,可爱又不失高贵,包包的拉链细节处理的也很漂亮,这么冷的天就她了吧。今天,我们来一起欣赏一下这个可爱手提泡芙工具包。 可爱手提泡芙工具包作品欣赏:
标签: 电脑入门
Ubuntu系统操作中,因为开发Gis应用程序的需要,要在Ubuntu系统中安装Mapnik工具包,那么要如何安装Mapnik工具包呢?下面图老师小编就给大家介绍下Ubuntu安装Mapnik工具包的步骤,感兴趣的朋友可以来了解下。 卸载旧的: sudo apt-get purge libmapnik* mapnik-utils python-mapnik 设置: sudo apt-get install / libboost-filesy...
用SkinMagic工具包创建换皮肤程序 作者:北京林业大学 李少杰 下载本文示例工程 代码运行效果图如下: 以前看到瑞星和金山词霸有换皮肤功能,很是羡慕,自己也想做个换皮肤的程序,但毕竟自己能力有限,以前在此处看到一篇介绍换皮肤功能的文章,但只能...
DOM初步  DOM是Document Object Model的缩写,即文档对象模型。前面说过,XML将数据组织为一颗树,所以DOM就是对这颗树的一个对象描叙。通俗的说,就是通过解析XML文档,为XML文档在逻辑上建立一个树模型,树的节点是一个个对象。我们通过存取这些对象就能够存取XML文档的内容。  下面我们来看一个简单的例子,看看在DOM中,我们是...

经验教程

80

收藏

12
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部