DOM4J

与利用DOM、SAX、JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异、功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml。dom4j是一套开源的api。实际项目中,往往选择dom4j来作为解析xml的利器。

先来看看dom4j中对应XML的DOM树建立的继承关系

针对于XML标准定义,对应于图中列出的内容,dom4j提供了以下实现:

同时,dom4j的NodeType枚举实现了XML规范中定义的node类型。如此可以在遍历xml文档的时候通过常量来判断节点类型了。

常用API

class org.dom4j.io.SAXReader

  • read  提供多种读取xml文件的方式,返回一个Domcument对象

interface org.dom4j.Document

  • iterator  使用此法获取node
  • getRootElement  获取根节点

interface org.dom4j.Node

  • getName  获取node名字,例如获取根节点名称为bookstore
  • getNodeType  获取node类型常量值,例如获取到bookstore类型为1——Element
  • getNodeTypeName  获取node类型名称,例如获取到的bookstore类型名称为Element

interface org.dom4j.Element

  • attributes  返回该元素的属性列表
  • attributeValue  根据传入的属性名获取属性值
  • elementIterator  返回包含子元素的迭代器
  • elements  返回包含子元素的列表

interface org.dom4j.Attribute

  • getName  获取属性名
  • getValue  获取属性值

interface org.dom4j.Text

  • getText  获取Text节点值

interface org.dom4j.CDATA

  • getText  获取CDATA Section值

interface org.dom4j.Comment

  • getText  获取注释

解析实例:

1.先准备好一个xml文件,本文解析的是一个spring的配置文件

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"> <beans>
<bean id="productManager" class="com.yangyang.manager.product.impl.ProductManagerImpl">
<property name="productDao" ref="productDao"></property>
<property name="soDao" ref="soDao"></property>
</bean>
<bean id="contractManager" class="com.yangyang.manager.product.impl.ContractManagerImpl" autowire="byName"/>
</beans>

2.第二步,添加dom4j的jar包到工程中,本文使用的jar版本是dom4j-1.6.1.jar

3.第三补,编写解析xml文件的工具类

 package com.yangyang;

 import java.net.URL;
import java.util.Iterator; import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; public class XmlParseUtil { @SuppressWarnings("rawtypes")
public static void parseXml(String xmlPath){
SAXReader saxReader=new SAXReader();
Document document=null;
try {
document=saxReader.read(xmlPath);
//获取根节点
Element elementRoot=document.getRootElement();
System.out.println("根节点名称:"+elementRoot.getName());
//遍历根节点下面的节点
for(Iterator elementIterator=elementRoot.elementIterator();elementIterator.hasNext();){
Element element=(Element)elementIterator.next();
//获取节点的信息,,包括节点的名称以及节点的属性信息
System.out.println("节点:"+element.getName());
for (Iterator attrIterator = element.attributeIterator(); attrIterator.hasNext();) {
Attribute attr=(Attribute)attrIterator.next();
//节点的属性信息
System.out.println("节点的属性名称为:"+attr.getName()+",值为:"+attr.getValue()); }
//获取节点下的子节点
for (Iterator subElementiterator = element.elementIterator(); subElementiterator.hasNext();) {
Element subElement=(Element)subElementiterator.next();
//获取子节点的信息,包括子节点的名称以及子节点的属性信息
System.out.println("子节点:"+subElement.getName());
for (Iterator subElementAttrIterator = subElement.attributeIterator(); subElementAttrIterator.hasNext();) {
Attribute subElementAttr=(Attribute)subElementAttrIterator.next();
//子节点的属性信息
System.out.println("子节点的属性名称为:"+subElementAttr.getName()+",值为:"+subElementAttr.getValue()); } }
}
} catch (Exception e) {
}
}
}

4.编写测试方法来测试该工具类:

 package com.yangyang;
import java.io.File;
public class TestXmlParse { /**
* @param args
*/
public static void main(String[] args) {
String xmlPath="src/com/yangyang/spring-service-product.xml";
xmlPath=new File(xmlPath).getAbsolutePath();
XmlParseUtil.parseXml(xmlPath);
} }

可以看到控制台打印出:

根节点名称:beans
节点:bean
节点的属性名称为:id,值为:productManager
节点的属性名称为:class,值为:com.yangyang.manager.product.impl.ProductManagerImpl
节点的属性名称为:lazy-init,值为:default
节点的属性名称为:autowire,值为:default
节点的属性名称为:dependency-check,值为:default
子节点:property
子节点的属性名称为:name,值为:productDao
子节点的属性名称为:ref,值为:productDao
子节点:property
子节点的属性名称为:name,值为:soDao
子节点的属性名称为:ref,值为:soDao
节点:bean
节点的属性名称为:id,值为:contractManager
节点的属性名称为:class,值为:com.yangyang.manager.product.impl.ContractManagerImpl
节点的属性名称为:autowire,值为:byName
节点的属性名称为:lazy-init,值为:default
节点的属性名称为:dependency-check,值为:default

使用dom4j解析xml文件的更多相关文章

  1. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  2. 用DOM4J解析XML文件案例

    用DOM4J解析XML文件案例,由于DOM4J不像JAXP属于JAVASE里,所以如果要使用DOM4J,则必须额外引入jar包,如图:

  3. 使用DOM4J解析XMl文件与读取XML文件

    XML文件 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id ...

  4. Dom4j解析Xml文件,Dom4j创建Xml文件

    Dom4j解析Xml文件,Dom4j创建Xml文件 >>>>>>>>>>>>>>>>>>&g ...

  5. Java进阶(二十七)使用Dom4j解析XML文件

    使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...

  6. 使用dom4j 解析xml文件

    //使用dom4j 解析xml文件,升级版,dom4j是对dom的封装 //重点 package com.offcn.utils; import java.io.File; import java.i ...

  7. dom4j 解析XML文件

    <?xml version="1.0" encoding="UTF-8"?> <!-- 手机的根节点 --> <Phones> ...

  8. 用dom4j解析xml文件并执行增删改查操作

    转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...

  9. 【java项目实战】dom4j解析xml文件,连接Oracle数据库

    简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...

  10. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

随机推荐

  1. 使用Webbrowser的一点心得体会

    原文:使用Webbrowser的一点心得体会 自从用上VS2005后,发现多了个WebBrowser控件(.net 2003中不带),为图方便吧,有好多小工具就用这个写的,慢慢也有点体会了,总结一下, ...

  2. 创建GitHub技术博客

    创建GitHub技术博客全攻略 githubio技术博客网站生成 说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字.本 ...

  3. Xcode下执行HelloWorld

    准备工作 到Cocos2d-x官方站点下载最新版本号v3.0beta2 创建HelloWorld项目 将刚才下载的压缩包解压到你指定的目录里. 进入到文件夹**cocos2d-x-3.0beta2/t ...

  4. 微信应用号开发知识贮备之altjs官方实例初探

    天地会珠海分舵注:随着微信应用号的呼之欲出,相信新一轮的APP变革即将发生.从获得微信应用号邀请的业内人士发出来的一张开发工具源码截图可以看到,reacjs及其相应的FLUX框架altjs很有可能会成 ...

  5. MSSQL2008数据库备份还原和数据恢复

    原文:MSSQL2008数据库备份还原和数据恢复   序言 一直想写一篇关于数据库备份与恢复的文章,但基于能力的有限对数据库认知的有限怕不足以准确的表达,最后思考很久还是决定把自己的一些理解写出来供大 ...

  6. EF的四种开发模式

    EF提供了四种开发模式,具体如下:(转载)Code First(New DataBase) :在代码中定义类和映射关系并通过model生成数据库,使用迁移技术更新数据库.Code First(Exis ...

  7. {{angular.js 使用技巧}} - 基于验证框架的扩展(w5cValidator)

    开场白: angular.js 是谷歌出的前端js MV*框架,我也是今年做 worktile 的时候才开始接触的,起初技术选型的时候还准备使用 backbone(毕竟很多大公司在使用他,而且也是比较 ...

  8. POCO Controller

    ---恢复内容开始--- POCO Controller 你这么厉害,ASP.NET vNext 知道吗?   写在前面 阅读目录: POCO 是什么? 为什么会有 POJO? POJO 的意义 PO ...

  9. ASP.NET MVC 缓存扩展 - Donut Caching

    项目介绍 ASP.NET MVC Extensible Donut Caching brings donut caching to ASP.NET MVC 3 and later. The code ...

  10. 利用自定义的AuthenticationFilter实现Basic认证

    [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证   很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前 ...