dom4j 使用总结
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件
dom4j的使用方法简单总结来说如下:
①可以创建一个新的xml文件
②利用SAXReader和File对象创建一个已存在的xml文件的一个Document对象
③利用Document对象的getRootElement()方法获取根节点,返回值类型为Element
④利用根节点,可以用迭代器遍历子节点,也可以直接利用XPATH语法查找节点,对节点元素、属性读取或更改
⑤将更改写入xml文件保存
下面来看简单的实例:
①创建一个新的xml文件,这是dom4j官方文档中的一个例子
1 import org.dom4j.Document;
2 import org.dom4j.DocumentHelper;
3 import org.dom4j.Element;
4
5 public class Foo {
6
7 public Document createDocument() {
8 Document document = DocumentHelper.createDocument();
9 Element root = document.addElement( "root" );
10
11 Element author1 = root.addElement( "author" )
12 .addAttribute( "name", "James" )
13 .addAttribute( "location", "UK" )
14 .addText( "James Strachan" );
15
16 Element author2 = root.addElement( "author" )
17 .addAttribute( "name", "Bob" )
18 .addAttribute( "location", "US" )
19 .addText( "Bob McWhirter" );
20
21 return document;
22 }
23 }
②利用SAXReader和File对象或xml的URL创建一个已存在的xml文件的一个Document对象
这里是dom4j官方文档中利用xml文件URL创建Document对象的一个例子:
1 import java.net.URL;
2
3 import org.dom4j.Document;
4 import org.dom4j.DocumentException;
5 import org.dom4j.io.SAXReader;
6
7 public class Foo {
8
9 public Document parse(URL url) throws DocumentException {
10 SAXReader reader = new SAXReader();
11 Document document = reader.read(url);
12 return document;
13 }
14 }
下面是我写的用SAXReader和File创建Document对象的例子:
1 import java.io.File;
2 import java.io.IOException;
3
4 import org.dom4j.Document;
5 import org.dom4j.DocumentException;
6 import org.dom4j.io.SAXReader;
7
8 public class Foo {
9
10 public Document parse() throws DocumentException ,IOException{
11 SAXReader reader = new SAXReader();
12 File file = new File("Student.xml");
13 Document document = reader.read(file);
14 return document;
15 }
16 }
③利用Document对象的getRootElement()方法获取根节点,返回值类型为Element
1 Element rootElement = document.getRootElement();
④用迭代器遍历子节点,也可以直接利用XPATH语法查找节点,对节点元素、属性读取或更改
利用迭代器遍历:
1 public void bar(Document document) throws DocumentException {
2
3 Element root = document.getRootElement();
4
5 //迭代root的子节点
6 for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
7 Element element = (Element) i.next();
8 // do something
9 }
10
11 // 迭代root的名为"foo"的子节点
12 for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
13 Element foo = (Element) i.next();
14 // do something
15 }
16
17 // 迭代root的属性
18 for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
19 Attribute attribute = (Attribute) i.next();
20 // do something
21 }
22 }
利用XPATH语法查找节点:
1 public void bar(Document document) {
2 List list = document.selectNodes( "//foo/bar" );
3
4 Node node = document.selectSingleNode( "//foo/bar/author" );
5
6 String name = node.valueOf( "@name" );
7 }
8
9 public void findLinks(Document document) throws DocumentException {
10
11 List list = document.selectNodes( "//a/@href" );
12
13 for (Iterator iter = list.iterator(); iter.hasNext(); ) {
14 Attribute attribute = (Attribute) iter.next();
15 String url = attribute.getValue();
16 }
17 }
Element类中的attribute(String name)方法和element(String name)方法分别可以获取节点的属性对象和某一子节点对象
elements(String name)方法可以返回名为name的子节点的列表List。
get(int index)方法可以获取本节点下以index索引的节点
getName()方法可以获取本节点的名字(name)
attributeValue(String name)方法以及Attribute类中的getValue()方法可以获取本节点name属性的值
getText()方法可以返回本节点的文本内容
elementText(String name)方法可以获取name子节点的文本内容
remove(Attribute attribute)方法和remove(Element element)方法分别可以移除本节点的某属性和某子节点
⑤将更改写入xml文件保存
官方文档中的例子:
1 import org.dom4j.Document;
2 import org.dom4j.io.OutputFormat;
3 import org.dom4j.io.XMLWriter;
4
5 public class Foo {
6
7 public void write(Document document) throws IOException {
8
9 // lets write to a file
10 XMLWriter writer = new XMLWriter(
11 new FileWriter( "output.xml" )
12 );
13 writer.write( document );
14 writer.close();
15
16
17 // Pretty print the document to System.out
18 OutputFormat format = OutputFormat.createPrettyPrint();
19 writer = new XMLWriter( System.out, format );
20 writer.write( document );
21
22 // Compact format to System.out
23 format = OutputFormat.createCompactFormat();
24 writer = new XMLWriter( System.out, format );
25 writer.write( document );
26 }
27 }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- WPF内存优化
- c语言函数指针的理解与使用
- K8s 安装部署
- [Oracle 日常管理]使用bbed读取数据文件
- ansible生产环境使用场景(四):encrypt_string加密和ansible-lint调试
- SQLite在C#中的安装与操作
- 详解强制Vue组件重新渲染的方法
- C# this.invoke()作用 多线程操作UI
- C#3种常见的定时器(多线程)
- C#使用MemoryStream类读写内存
- C# WPF基础之Timer
- Angular 父子Component的数据绑定实现
- C# WPF线程操作
- Angular 界面元素的条件渲染
- mysqlbinlog命令详解 Part 2 - MySQL 事件类型