Fork me on GitHub

Java读取xml——dom4j篇

首先引入dom4j的jar

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.hucheng.xmlParse;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XmlUtils
{
public static void main(String[] args)
{
long lasting = System.currentTimeMillis();
try
{
//获取xml文件
File f = new File("data.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
//获取到根节点
Element node = doc.getRootElement();
//判断跟节点下面是否还有子节点
if (node.elementIterator().hasNext())
{
Element next = (Element)node.elementIterator().next();
}
Iterator<Element> iterator = node.elementIterator();
//开始循环子节点
while(iterator.hasNext()){
Element e = iterator.next();
listNodes(e);
}
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + " 毫秒");
}
/**
* @描述:循环子节点
* @作者:chen
* @时间:2017年8月17日 上午10:53:06
* @param node
*/
protected static void listNodes(Element node)
{
//首先获取当前节点的所有属性节点
List<Attribute> list = node.attributes();
//遍历属性节点
for(Attribute attribute : list){
System.out.println("属性"+attribute.getName() +":" + attribute.getValue());
}
//如果当前节点内容不为空,则输出
if(!(node.getTextTrim().equals(""))){
System.out.println( node.getName() + ":" + node.getText());
}
//同时迭代当前节点下面的所有子节点
//使用递归
Iterator<Element> iterator = node.elementIterator();
while(iterator.hasNext()){
Element e = iterator.next();
listNodes(e);
}
}
}

下面是 data.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<VALUES>
<VALUE id = "1" name = "第一个">
<NO>鄂B74110</NO>
<ADDR>湖北省黄石市白沙镇</ADDR>
</VALUE>
<VALUE id = "2" name = "第二个">
<NO>鄂B74111</NO>
<ADDR>湖北省黄石市白沙镇白沙老街</ADDR>
</VALUE>
<VALUE id = "3" name = "第三个">
<NO>鄂B74112</NO>
<ADDR>湖北省黄石市白沙镇白沙中学</ADDR>
</VALUE>
</VALUES>

控制台会输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
属性id:1
属性name:第一个
NO:鄂B74110
ADDR:湖北省黄石市白沙镇
属性id:2
属性name:第二个
NO:鄂B74111
ADDR:湖北省黄石市白沙镇白沙老街
属性id:3
属性name:第三个
NO:鄂B74112
ADDR:湖北省黄石市白沙镇白沙中学
运行时间:71 毫秒

感觉不错的话请点击下方按钮打赏我吧!
undefined