一、概述

DOM4J是一个易用的、开源的库,用于XML、XPath和XSLT中。采用了Java集合框架并完全支持DOM、SAX、和JAXP。

DOM4J最大的特色是使用大量的接口,主要接口都在org.dom4j这个包里定义:

二、DOM4J的接口

Attribute:定义了XML的属性;

Branch:是能够包含子节点的节点,如XML元素(Element)和文档(Documents)定义了一个公共的行为;

CDATA:定义了XML的CDATA区域;

CharacterData:是一个标识接口,标致基于字符的节点:(CDATA、Comment、Text);

Comment:定义了XML注释的行为;

Document:定义了XML文档;

DocumentType:定义了XML的DOCTYPE声明;

Element:定义了XML文档;

ElementHandler:定义了Element对象的处理器;

ElementPath:被ElementHandler使用,用于取得当前正在处理的路径层次信息;

Entity:定义XML的entity;

Node:为所有的DOM4J中XML节点定义了多态行为;

NodeFilter:定义了在DOM4J节点中产生的一个滤镜或谓词的行为(predicate);

ProcessingInstruction:定义XML处理指令;

Text:定义XML文本节点;

Visitor:用于实现Visitor模式;

XPath:在分析一个字符串后会提供一个XPath表达式。

三、使用DOM4J操作XML数据

1.Document对象相关

读取XML文件,获得document对象。

SAXReader reader = new SAXReader();

Document document = reader.read(new File("input.xml"));

2.节点相关

获取文档的根元素

Element rootElm = document.getRootElement();

取得某节点的单个子节点

Element memberElm = root.element("member");//"member"是节点名

取得节点的文字

String text = memberElm.getText();

String text = root.elementText("name");//取得根元素下的name子节点的文字

取得某节点下名为“member”的所有子节点并进行遍历

List nodes = rootElm.elements("member");

for(Iterator it=nodes.iterator;it.hasNext();){

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

}

对某节点下的所有子节点进行遍历

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

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

}

在某节点下添加子节点

Element ageElm = newMemberElm.addElement("age");

设置节点文字

ageElm.setText("29");

删除某节点

parentElm.remove(childElm);//childElm是待删除的节点,parentElm是其父节点

3.相关属性

取得某节点下的属性

Element root = document.getRootElement();

Attribute attribute = root.attribute("size");//属性名name

取得属性的文字

String text = attribute.getText();

String text = root.element("name").attributeValue("firstname");

遍历某节点的所有属性

Element root = document.getRootElement();

for(Iterator it = root.attributeIterator();it.hasNext();{

  Attribute attribute = (Attribute)it.next();

  String text = attribute.getText();

  System.out.println(text);

}

设置某节点的属性和文字

newMemberElm.addAttribute("name","sitinspring");

设置属性的文字

Attribute attribute = root.attribute("name");

attribute.setText("sitinspring");

删除某属性

Attribute attribute = root.attribute("size");

root.remove(attribute);

4.将文档写入XML文件

(1)文档中全为英文,不设置编码格式,直接写入

XMLWriter writer = new XMLWriter(new FileWriter("output.xml");

writer.write(document);

writer.close();

(2)文档中含有中文,设置编码格式在写入

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding("GBK");

XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);

writer.write(document);

writer.close();

四、案例:使用DOM4J读取XML文档,步骤如下:

1.导入DOM4J的jar包

2.指定要解析的XML文件

3.把XML文件转换成Document对象

4.获取节点属性或文本的值

 import java.io.File;
import java.util.Iterator; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; /**
* 使用DOM4J解析XML文档
* @author Administrator
*
*/
public class PhoneDom4j { public static void main(String[] args) {
Document phone = null;
try {
//加载DOM树
SAXReader saxReader = new SAXReader();
phone = saxReader.read(new File("src/phoneInfo.xml"));
} catch (DocumentException e) {
e.printStackTrace();
}
//获取xml的根节点
Element root = phone.getRootElement();
//遍历所有的Brand标签
for (Iterator<?> itBrand = root.elementIterator(); itBrand.hasNext();) {
Element brand = (Element) itBrand.next();
//输出标签的属性
System.out.println("品牌:"+brand.attributeValue("name"));
//遍历Type标签
for (Iterator<?> itType = brand.elementIterator(); itType.hasNext();) {
Element type = (Element) itType.next();
//输出标签的name属性
System.out.println("\t型号:"+type.attributeValue("name"));
}
} } }

【学习笔记】关于DOM4J:使用DOM4J解析XML文档的更多相关文章

  1. dom4j创建和解析xml文档

    DOM4J解析  特征: 1.JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能. 2.它使用接口和抽象基本类方法. 3.具有性能优异.灵活性好.功能强大和极端易用的特点. 4.是一个开 ...

  2. 使用dom4j解析XML文档

    dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...

  3. DOM4J解析XML文档

    Tip:DOM4J解析XML文档 Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM的人分离出来而后独立开发的.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j ...

  4. 使用DOM4J解析XML文档,以及使用XPath提取XML文档

    使用DOM4J解析XML文档 需要首先下载DOM4J工具包.这是个第三方工具包 在使用DOM4J解析的时候需要导入 DOM4J的JAR包 下载DOM4J工具包->在MyEclipse中新建lib ...

  5. dom4j解析xml文档全面介绍

    一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...

  6. 源生API解析XML文档与dom4j解析XML文档

    一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...

  7. Java高级特性 第15节 解析XML文档(3) - JDOM和DOM4J技术

    一.JDOM解析 特征: 1.仅使用具体类,而不使用接口. 2.API大量使用了Collections类. Jdom由6个包构成: Element类表示XML文档的元素 org.jdom: 解析xml ...

  8. javaweb dom4j解析xml文档

    1.什么是dom4j dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它 ...

  9. Xml学习笔记(3)利用递归解析Xml文档添加到TreeView中

    利用递归解析Xml文档添加到TreeView中 private void Form1_Load(object sender, EventArgs e) { XmlDocument doc = new ...

随机推荐

  1. blog搬家须知

    我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻. 地址:这里. 不过这里也是会同步更新的

  2. java 读取excel 2007 .xlsx文件 poi实现

    工作需要读取excel里面的行内容,使用java实现较为简单. 在最开始,尝试使用 jxl-2.6.12 来实现读取excel 的行内容.但是按照网上的方法,程序根本无法正确处理文件流.经过谷姐的一番 ...

  3. 根据枚举获取枚举的Description特性值

    首先定义一个枚举:两个值:已确认.未确认. public enum ConfirmStatusEnum { [Description("未确认")] unconfirmed = , ...

  4. 构建docker镜像

    一.通过docker commit命令构建镜像 docker commit 构建镜像可以想象为是将运行的镜像进行重命名另存一份.我们先创建一个容器,并在容器里做出修改,就像修改代码一样,最后再将修改提 ...

  5. 选课 树形背包dp

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

  6. Python之freshman04

    一.迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的 ...

  7. UVALive - 3942 左儿子trie DP

    题意:白书P209 本题用普通字典树会更快,为了练习还是尝试再敲一遍左儿子-右兄弟字典树(其实就是字典树上开前向星) dp[i]为满足[i...len)的分配方案数,转移方程为dp[i]=sum{dp ...

  8. BZOJ - 1257 分块 详解

    中文题面 这道题就是LightOJ某题的升级版 前段时间我是直接用√k前暴力后分块的处理方式,然后直接套个等差求和 这次看到了dalao的证明再次让我知道我好菜啊 在这里做下笔记,学习一下对于整除运算 ...

  9. filezilla绑定编辑器

    编辑  - >设置 ->文件格式关联 ->输入需要关联的编辑器的路径

  10. Oracle分析函数系列之first_value/last_value:在记录集中查找第一条记录和最后一条记录

    [转自] http://blog.csdn.net/rfb0204421/article/details/7675911 注意:与max,min的区别,虽然也可以实现,但只是针对数字字段. 1.初始化 ...