博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在java中使用dom4j解析xml
阅读量:2216 次
发布时间:2019-05-07

本文共 4429 字,大约阅读时间需要 14 分钟。

虽然Java中已经有了Dom和Sax这两种标准解析方式

但其操作起来并不轻松,对于我这么一个初学者来说,其中部分代码是活生生的恶心

为此,伟大的第三方开发组开发出了Jdom和Dom4j等工具

鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作

 往maven中添加的dom4j依赖如下:

<dependency>

            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6</version>
        </dependency>

Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了

首先我们需要出创建一个xml文档,然后才能对其解析

xml文档:

<?
xml 
version="1.0" encoding="UTF-8"?>
<
books
>
   
<
book 
id="001">
      
<
title
>Harry Potter</
title
>
      
<
author
>J K. Rowling</
author
>
   
</
book
>
   
<
book 
id="002">
      
<
title
>Learning XML</
title
>
      
<
author
>Erik T. Ray</
author
>
   
</
book
>
</
books
>

 

示例一:用List列表的方式来解析xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import 
java.io.File;
import 
java.util.List;
 
import 
org.dom4j.Attribute;
import 
org.dom4j.Document;
import 
org.dom4j.Element;
import 
org.dom4j.io.SAXReader;
 
 
 
public 
class 
Demo {
 
    
public 
static 
void 
main(String[] args) 
throws 
Exception {
        
SAXReader reader = 
new 
SAXReader();
        
File file = 
new 
File(
"books.xml"
);
        
Document document = reader.read(file);
        
Element root = document.getRootElement();
        
List<Element> childElements = root.elements();
        
for 
(Element child : childElements) {
            
//未知属性名情况下
            
/*List<Attribute> attributeList = child.attributes();
            
for (Attribute attr : attributeList) {
                
System.out.println(attr.getName() + ": " + attr.getValue());
            
}*/
             
            
//已知属性名情况下
            
System.out.println(
"id: " 
+ child.attributeValue(
"id"
));
             
            
//未知子元素名情况下
            
/*List<Element> elementList = child.elements();
            
for (Element ele : elementList) {
                
System.out.println(ele.getName() + ": " + ele.getText());
            
}
            
System.out.println();*/
             
            
//已知子元素名的情况下
            
System.out.println(
"title" 
+ child.elementText(
"title"
));
            
System.out.println(
"author" 
+ child.elementText(
"author"
));
            
//这行是为了格式化美观而存在
            
System.out.println();
        
}
    
}
 
}

 

示例二:使用Iterator迭代器的方式来解析xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import 
java.io.File;
import 
java.util.Iterator;
 
import 
org.dom4j.Attribute;
import 
org.dom4j.Document;
import 
org.dom4j.Element;
import 
org.dom4j.io.SAXReader;
 
 
 
public 
class 
Demo {
    
public 
static 
void 
main(String[] args) 
throws 
Exception {
        
SAXReader reader = 
new 
SAXReader();
        
Document document = reader.read(
new 
File(
"books.xml"
));
        
Element root = document.getRootElement();
         
        
Iterator it = root.elementIterator();
        
while 
(it.hasNext()) {
            
Element element = (Element) it.next();
             
            
//未知属性名称情况下
            
/*Iterator attrIt = element.attributeIterator();
            
while (attrIt.hasNext()) {
                
Attribute a  = (Attribute) attrIt.next();
                
System.out.println(a.getValue());
            
}*/
             
            
//已知属性名称情况下
            
System.out.println(
"id: " 
+ element.attributeValue(
"id"
));
             
            
//未知元素名情况下
            
/*Iterator eleIt = element.elementIterator();
            
while (eleIt.hasNext()) {
                
Element e = (Element) eleIt.next();
                
System.out.println(e.getName() + ": " + e.getText());
            
}
            
System.out.println();*/
             
            
//已知元素名情况下
            
System.out.println(
"title: " 
+ element.elementText(
"title"
));
            
System.out.println(
"author: " 
+ element.elementText(
"author"
));
            
System.out.println();
        
}
    
}
}

 运行结果:

示例三:创建xml文档并输出到文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import 
java.io.File;
import 
java.io.FileOutputStream;
 
import 
org.dom4j.Document;
import 
org.dom4j.DocumentHelper;
import 
org.dom4j.Element;
import 
org.dom4j.io.OutputFormat;
import 
org.dom4j.io.XMLWriter;
 
 
public 
class 
Demo {
    
public 
static 
void 
main(String[] args) 
throws 
Exception {
        
Document doc = DocumentHelper.createDocument();
        
//增加根节点
        
Element books = doc.addElement(
"books"
);
        
//增加子元素
        
Element book1 = books.addElement(
"book"
);
        
Element title1 = book1.addElement(
"title"
);
        
Element author1 = book1.addElement(
"author"
);
         
        
Element book2 = books.addElement(
"book"
);
        
Element title2 = book2.addElement(
"title"
);
        
Element author2 = book2.addElement(
"author"
);
         
        
//为子节点添加属性
        
book1.addAttribute(
"id"
"001"
);
        
//为元素添加内容
        
title1.setText(
"Harry Potter"
);
        
author1.setText(
"J K. Rowling"
);
         
        
book2.addAttribute(
"id"
"002"
);
        
title2.setText(
"Learning XML"
);
        
author2.setText(
"Erik T. Ray"
);
         
        
//实例化输出格式对象
        
OutputFormat format = OutputFormat.createPrettyPrint();
        
//设置输出编码
        
format.setEncoding(
"UTF-8"
);
        
//创建需要写入的File对象
        
File file = 
new 
File(
"D:" 
+ File.separator + 
"books.xml"
);
        
//生成XMLWriter对象,构造函数中的参数为需要输出的文件流和格式
        
XMLWriter writer = 
new 
XMLWriter(
new 
FileOutputStream(file), format);
        
//开始写入,write方法中包含上面创建的Document对象
        
writer.write(doc);
    
}
}

 运行结果:

转载地址:http://pyzfb.baihongyu.com/

你可能感兴趣的文章
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>
Linux 查看文件大小
查看>>
Java并发编程:线程池的使用
查看>>
redis单机及其集群的搭建
查看>>
Java多线程学习
查看>>
检查Linux服务器性能
查看>>
Java 8新的时间日期库
查看>>
Chrome开发者工具
查看>>
【LEETCODE】102-Binary Tree Level Order Traversal
查看>>
【LEETCODE】106-Construct Binary Tree from Inorder and Postorder Traversal
查看>>
【LEETCODE】202-Happy Number
查看>>