解析xml文件我们首先需要了解什么是xml文件:
XML即为可扩展标志语言(eXtensible Markup Language)。标记指的是计算机所能理解的信息符号,通过标记,计算机就可以解析处理相关的数据。可以通过HTML定义这些标记,同时也可以使用像XML这昂扬的相关人士自由决定的标记语言,这就是语言的可扩展性。
如果需要具体了解什么是XML可参考该作者文章
http://t.csdn.cn/6EuJg
XML的主要作用:
- 保存数据
- 作为项目的配置文件
- 作为网络数据传输的格式(现以json格式为主)
dom4j解析xml文件:
- 创建maven项目
- 在pom.xml中导入依赖3.
<!-- dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
- 在resources目录下创建一个xml文件(用于测试不需要太复杂,了解解析xml的原理即可)
<?xml version="1.0" encoding="utf-8" ?>
<class>
<!--
元素是XML的重要组成部分,元素也被称为标签
每个XML文件必须要有一个根标签
标签有开始标签和结束标签组成,开始标签和结束标签可以写标签,也可以是文本字符串
标签可以嵌套使用,但是不能随便嵌套
标签名必须准守命名规则和命名规范
-->
<!--
属性是标签的组成部分,属性只能定义在开始标签中
属性定义的格式:属性名=属性值,属性值需要使用""包含起来
开始标签中可以定义多个属性,但是多个属性的属性名不能相同
属性名必须准守命名规则和命名规范
-->
<student rollno="西游记">
<作者>吴承恩</作者>
<人物一>猴子</人物一>
<人物二>唐僧</人物二>
<人物三>猪儿</人物三>
</student>
<student rollno="红楼梦">
<人物一>林黛玉</人物一>
<人物二>贾宝玉</人物二>
<人物三>鑫儿</人物三>
<marks>85</marks>
</student>
<student rollno="三国演义">
<人物一>张飞</人物一>
<人物二>关羽</人物二>
<人物三>刘备</人物三>
<marks>85</marks>
</student>
</class>
- 解析xml具体java代码:
Dom4j的常用API说明:
Element getRootElement():获取XML文件的根节点
String getName():返回标签的名称
List < Element > elements():获取标签所有的子标签
String arrtributeVallue(String name) :获取指定属性名称的属性值
String getText():获取标签的文本
String elementText(String name):获取指定名称的子标签的文本,返回子标签文本的值
public class Test {
public static void main(String[] args) throws DocumentException {
//创建Reader对象
SAXReader re = new SAXReader();
File path = new File("src/main/resources/test.xml");
//加载xml 获取Document
Document document = re.read(path);
//迭代器获取节点
Element rootElement = document.getRootElement();
Iterator iterator = rootElement.elementIterator();
//遍历节点
while (iterator.hasNext()) {
Element stu = (Element) iterator.next();
//获取该节点的信息
System.out.println(stu.getName());
//将节点通过attributes方法 转换为List数组
List<Attribute> attributes = stu.attributes();
System.out.println("=====获取属性=====");
//打印属性
for (Attribute attribute:attributes){
System.out.println(attribute.getStringValue());
}
System.out.println("=====遍历子节点=====");
Iterator iterator1 = stu.elementIterator();
while (iterator1.hasNext()) {
Element stuChild = (Element) iterator1.next();
System.out.println("节点名:"+stuChild.getName()+"----节点值"+stuChild.getStringValue());
}
}
}
}
输出结果: