【学习笔记】关于DOM4J:使用DOM4J解析XML文档
一、概述
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文档的更多相关文章
- dom4j创建和解析xml文档
DOM4J解析 特征: 1.JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能. 2.它使用接口和抽象基本类方法. 3.具有性能优异.灵活性好.功能强大和极端易用的特点. 4.是一个开 ...
- 使用dom4j解析XML文档
dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...
- DOM4J解析XML文档
Tip:DOM4J解析XML文档 Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM的人分离出来而后独立开发的.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j ...
- 使用DOM4J解析XML文档,以及使用XPath提取XML文档
使用DOM4J解析XML文档 需要首先下载DOM4J工具包.这是个第三方工具包 在使用DOM4J解析的时候需要导入 DOM4J的JAR包 下载DOM4J工具包->在MyEclipse中新建lib ...
- dom4j解析xml文档全面介绍
一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...
- 源生API解析XML文档与dom4j解析XML文档
一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...
- Java高级特性 第15节 解析XML文档(3) - JDOM和DOM4J技术
一.JDOM解析 特征: 1.仅使用具体类,而不使用接口. 2.API大量使用了Collections类. Jdom由6个包构成: Element类表示XML文档的元素 org.jdom: 解析xml ...
- javaweb dom4j解析xml文档
1.什么是dom4j dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它 ...
- Xml学习笔记(3)利用递归解析Xml文档添加到TreeView中
利用递归解析Xml文档添加到TreeView中 private void Form1_Load(object sender, EventArgs e) { XmlDocument doc = new ...
随机推荐
- leecode刷题(2)-- 买卖股票的最佳时机
买卖股票的最佳时机 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多 ...
- 【ARC074F】Lotus Leaves 最小割
Description 给你一个n*m网格图,有起点荷叶和终点荷叶,有中转荷叶,其他的格子没东西,一个荷叶可以跳到同一行或者列的另一个荷叶.问最多删掉几个中转荷叶能让起点终点不连通.如果不行输出-1. ...
- 【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 文章声明 此文章部分资料和代码整合自网上,来源太多已经无法查明出处,如侵犯您的权利,请联系我删除. 01 什么是旅行商问题(TS ...
- Sublime的一些问题记录
1.默认的中文字体显示异常(参考:关于最新版的Sublime Text 3中默认的中文字体样式显示异常的问题) 1. 选择Perferences(首选项)--> settings(设置) 2. ...
- [jvm]基于jvm的线程实现
一.线程的实现 学过操作系统的肯定都知道: 进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位. 线程:是进程的一个执行单元,是进程内可调度实体. ...
- 《条目十八》避免使用vector<bool>
<条目十八>避免使用vector 先说结论: 一是:vector<bool>不是标准容器,因为标准容器的对于T *p = &c[0];必须是可编译的. 二是:vecto ...
- 一款很好用的页面滚动元素动画插件-AOS.JS
aos.js是一款效果超赞的页面滚动元素动画jQuery动画库插件.该动画库可以在页面滚动时提供28种不同的元素动画效果,以及多种easing效果.在页面往回滚动时,元素会恢复到原来的状态. 加载方法 ...
- 【问题记录】Python运行报错:can only concatenate str (not "int") to str
自己总是写程序时候用 + 拼接的时候忘记变量类型要一致,如下面 frame_num = "1" for i in range(1, frame_num + 1, 1): self. ...
- 洛谷 P1111 修复公路(最小生成树)
嗯... 题目链接:https://www.luogu.org/problemnew/show/P1111 这道题的关键是读懂题: 首先根据题中的一些扎眼的字眼我们可以判断这是一道用最小生成树来做的题 ...
- 010 Android Toolbar组件的应用(顶部菜单栏)
1 .取消app顶部project工程名显示 在styles.xml中进行相关设置 2.菜单列表项 <1>app--->res-->Android Resource Dicti ...