`

dom4j

 
阅读更多

dom4j

JDOM一样,也是一种用于解析XML文档的开源库.dom4j是由早期开发JDOM的人分离出来的人独立开发的.

dom4j API使用了Java集合框架并完全支持DOM,SAX,JAXP

dom4j使用接口和抽象基类,dom4jAPI相对复杂.

 

dom4j使用SAX解析器来分析XML文档.创建dom4j.此外,dom4j也可以接收DOM格式的内容,并提供从dom4j树到SAX事件流或W3CDOM树的输出机制.

 

dom4j十分优秀,许多项目都用dom4j作为XML解析器.

 

面向接口编程

引用程序主要面向Document,Element,ProcessingInstruction等接口编程,至于这些接口的底层实现,程序员无须关心.

 

dom4j实质上是以其他XML解析器为基础的,采用面向接口编程的方式将允许dom4j的底层在不同的解析机制之间自由切换.

 

支持多种解析机制

dom4j对底层原始的XML解析器进行了高度封装,正是这种封装简化了XML处理.

org.dom4j.io包下提供了如下几个类.

DOMReader:负责根据W3CDOM树创建dom4j.

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

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

XPPReader:基于XML Pull Parser 2.x 解析器,目前不支持注释,CDATA和处理指令.

 

 

 

dom4j常用API

采用面向接口方式来解析XML文档,开发过程中所使用的API通常都是接口.

 

Node  dom4j树中的所有节点的根接口

Branch  代表能包含子节点的节点,Branch接口下有两个子接口:ElementDocument.

Element  代表XML元素

Document  代表XML文档

Attribute  代表XML元素属性

DocumentType  代表XML里的DOCTYPE.

ProcessingInstruction  代表XML文档里的处理指令.

CharacterData  所有文本元素的父接口,CDATA ,Text,Comment三个子接口.

CDATA  代表XML里的CDATA.

Text  代表XML里的文本内容

Comment  代表XML文档里的注释内容.

 

输出

DOMWriter:负责将dom4j树转换为W3CDOM.

SAXWriter:该输出工具类负责将dom4j树输出给SAXContentHandler处理.

XMLWriter:dom4j树转换成对应的XML文档,并可输出到指定输出流中.

 

创建新的Document

DocumentFactory:提供一个createDocument()方法用于创建Document对象.

DocumentHelper: 创建XML文档各个组成部分,该类的所有方法都是静态方法.

 

创建XML文档

org.dom包中提供了DocumentHelper.

Document doc=DocumentHelper.createDocument();

Element eltRoot=DocumentHelper.createElement(“student”);

doc.setRootElement(eltRoot);

也可以先创建根元素对象,然后创建文档对象的同时指定根元素.

Element eltRoot=DocumentHelper.createElement(“student”);

Document doc=DocumentHelper.createDocument(eltRoot);

 

添加属性

eltRoot.addAttribute(“sn”,”10”);

 

添加子元素以及设置元素内容

Branch接口中,定义了addElement()方法.

public Element addElement(String name)

 

该方法用指定的name为当前节点添加一个字元素节点,并返回新节点的引用.

:添加两个子元素.

Element eltName=eltRoot.addElement(“name”)  //创建元素,子元素.

Element eltAge=elt.addElement(“age”)  //创建元素,子元素.

 

eltName.setText(“剑圣”);  //给元素添加内容.

eltAge.setText(“128”);  //给元素添加内容.

 

输出文档

org.dom4j.io

DOMWrite类可以将dom4j树输出为W3C Document对象.

SAXWrite类可以将dom4j树作为SAX事件流输出.

XMLWrite类则提供了将dom4j树的各个部分以XML流的方式输出的能力.

 

将创建的XML文档输出到控制台:

XMLWriter xmlWriter=new XMLWriter();

xmlWriter.writer(doc);

将创建的XML文档输出到文件:

XMLWriter xmlWriter=new XMLWriter(new java.io.FileOutputStream(“student.xml”));

xmlWriter.writer(doc);

也可以使用java.io.Writer对象

XMLWriter xmlWriter=new XMLWriter(new java.io.FileWriter (“student.xml”));

xmlWriter.writer(doc);

xmlWriter.close();

 

注意如果不采用java.io.Writer 对象构建的XMLWriter对象,其底层代码设置了自动刷新,也就是说,对缓冲的输出,一旦调用了XMLWriter对象的writer()方法,将会自动刷新.

而对java.io.Writer对象构建XMLWriter对象,则没有设置自动刷新,所以在调用writer()方法后,需要调用xmlWriter.close(); 或者xmlWriter.flush();

注意XMLWriter继承自org.xml.sax.helpers.XMLFilterImpl,而不是从java.io.Writer类派生而来,它所提供的flush() close() 方法只是内部java.io.Writer对象的flush() close()方法的包装.

 

格式

控制文档输出格式的类

org.dom4j.io.OutputFormat  用于设置输出文档字符编码,设置行分隔符及控制使用的缩进字符串等.

 

:设置输出4个空格作为缩进字符串,元素之间添加新行

OutputFormat outFmt=new OutputFormat(“    ”,true);

XMLWriter xmlWriter=new XMLWriter(outFmt);

xmlWriter.writer(doc);

 

 

:美化的格式输出文档,设置GB2312,并用4个空格作为缩进.

OutputFormat outFmt=OutputFormat.createPrettyPrint();

outFmt.setEncoding(“GB2312”);

outFmt.setIndent (“    ”);

XMLWriter xmlWriter=new XMLWriter(outFmt);

xmlWriter.writer(doc);

 

 

构建dom4j

org.dom4j.io.

DOMReader:负责根据W3CDOM树创建dom4j.

SAXReader:基于SAX解析机制来解析一份XML文档,并从不同的输入源来构造dom4j.

SAXReader类来构造dom4j文档对象:

SAXReader saxReader=new SAXReader();

File file=new File(“student.xml”);

Document doc=saxReader.read(file);

 

DOMReader类来构造dom4j文档对象:

DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstanc(); 

DocumentBuilder db= dbf.new DocumentBuilder();

File file=new File(“student.xml”);

org.w3c.Document document=db.parse(file);

DOMReader domReader=new DOMReader();

org.dom4j.Document doc= domReader.read(document);   //W3C DOM document转成dom4j

 

访问根元素

Document,getRootElement()方法,用于返回文档下的根元素.

Element root=doc.getRootElement();

 

访问节点

要得到某个元素的所有子元素.

java.util.List childrenList=elt. elements();  //

 

要得到某个元素的指定名称的子元素

java.util.List childrenList= elt. elements(“student”);  //

 

要得到某个元素的指定名称的第一个子元素

Element eltChild= elt. element(“student”);  //

 

迭代所有子元素

for(java.util.Iterator it=root.elementIterator();it.hasNext();){

Element element=(Element)it.next();

……

}

 

 

XPath

dom4j中集成了XPath的支持.选择节点时,可以直接使用XPath表达式.

为了能够编译执行XPath表达式.需要配置dom4j中自带的jaxen. jaxen包是一个用Java开发的开源XPath引擎,用于配置各种基于XML的对象模型,DOM,XOM,dom4j,JDOM.

 

:

得到student.xml中所有的<name>元素

java.util.List l= root. selectNodes(“//name”);  //

选择属性sn=01<student>元素

java.util.List l= root. selectNodes(“//student[@sn=’01’]”);  //

 

 

删除元素

要删除某个元素,使用Branch接口中定义的remove()方法.

Element eltStu=root.element(“student”);

root.remove (eltStu);  //

 

访问属性

要得到某个元素的所有属性

java.util.List attrList=elt. attributes();  //

要得到指定的属性

Attribute attr=elt. attribute(“sn”);  //

要得到指定的属性值

String attrValue=elt. attributeValue(“sn”);  //

要删除某个属性

elt. remove(elt. attributeValue(“sn”));  //

 

使用DTD验证

 

使用XML Schema验证

 

 

分享到:
评论

相关推荐

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    在项目中使用DOM4J时,只需将相应的jar包(如dom4j-1.6.1.jar、dom4j-2.0.2.jar或dom4j-2.1.1.jar)导入到类路径中,即可开始利用其功能处理XML文档。导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写...

    dom4j dom4j dom4j dom4j

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单易行。在Java世界中,DOM4J是与DOM、SAX和JDOM等其他XML处理库并驾齐驱的一个选择,尤其在处理...

    dom4j_dom4j1.6.1安装包_

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的解析、创建、查询和修改变得更为简单。在本文中,我们将深入探讨DOM4J 1.6.1版本的安装及其在Maven项目中的应用。 首先,DOM4J...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效的API,使得XML的解析、创建、修改和查询变得简单。这次我们有两个版本的DOM4J库:1.6.1和2.0.0-ALPHA。这两个版本在功能、性能和API设计上都有所...

    dom4j_1.6.1.jar dom4j_2.1.0.jar

    标题提及的"dom4j_1.6.1.jar"和"dom4j_2.1.0.jar"是两个不同版本的DOM4J库的Java档案文件,DOM4J是一个非常流行的Java XML API,用于处理XML文档。这两个版本的差异在于功能、性能优化和可能存在的bug修复。描述中...

    dom4j所依赖的所有jar包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而直观的API,使得开发者可以方便地读取、写入、修改以及操作XML文件。DOM4J 1.6.1是这个库的一个稳定版本,发布于较早时期,但依然广泛应用于许多Java...

    dom4j-2.1.1-API文档-中英对照版.zip

    赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...

    dom4j-2.1.1-API文档-中文版.zip

    赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...

    dom4j需要的包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于“Document Object Model for Java”,它采用面向对象的设计思想,提供了...

    dom4j-2.1.3.zip

    另一份重要的资源是"dom4j-2.1.3-sources.jar",它提供了DOM4J库的源代码,允许开发者深入研究DOM4J的内部实现,对于理解DOM4J的工作原理、进行扩展或者调试都是不可或缺的。通过阅读源代码,开发者可以学习到如何...

    dom4j-2.0.3.zip

    《深入解析DOM4J——基于Java的XML处理框架》 DOM4J,作为一个强大的Java XML API,是处理XML文档的主流工具之一。它提供了一套简单而高效的方式来操作XML文档,包括读取、写入、修改和遍历XML结构。在Java开发中,...

    所有版本的dom4j工具包

    标题提到的"所有版本的dom4j工具包"表明这是一个包含多版本DOM4J库的集合,可能包括了从早期到较新的一些版本,如dom4j-1.4.jar、dom4j-1.6.1.jar和dom4j-1.5.2.jar。这些不同版本的库可能分别对应于不同的功能特性...

    dom4j 2.1.1

    DOM4J 2.1.1 是一个针对Java平台的高效、开源的XML处理库,其全称为“Document Object Model for Java”。这个库提供了一系列强大的API,使得开发人员能够轻松地解析、创建、修改和操作XML文档。XML(eXtensible ...

    org.dom4j.jar

    当我们遇到“java.lang.ClassNotFoundException: org.dom4j.DocumentException”的错误提示时,这通常意味着系统中缺少了DOM4j库,只需将“org.dom4j.jar”添加到项目类路径中即可解决此问题。 DOM4J是基于DOM和SAX...

    DOM4J帮助文档及使用教程

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高性能的API,使得在Java应用程序中解析、创建、修改和操作XML文档变得容易。DOM4J因其易用性和丰富的功能集,在Java社区中广受欢迎,尤其在处理大型...

    dom4j.jar 下载

    DOM4J是一个强大的Java库,专门用于处理XML文档。它是一个灵活且高性能的XML解析器,提供了丰富的API来创建、修改和操作XML数据。在Java应用程序中,DOM4J作为一个流行的选择,尤其在处理复杂的XML结构时,因为它...

    DOM4J 的使用

    DOM4J 的使用 DOM4J 是一个开源的 XML 解析包,由 dom4j.org 出品,应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM、SAX 和 JAXP。DOM4J 的主要特点是使用大量的接口,所有主要接口都在 org.dom4j 里面定义...

    dom4j dom4j1.6 dom4j最新版

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J 1.6是该库的一个较新版本,提供了完整的功能集以及对XML标准的广泛支持。 DOM4J的核心...

Global site tag (gtag.js) - Google Analytics