采取Dom4j分解XML数据
原创使用Dom4j解析XML文件
一、XML解析 基础知识
1.1 XML解析种类
XML解析方法有 4种 ,是: DOM解析、SAX解析、JDOM解析、DOM4j解析
。前两种是官方提供的基本方法。 独立于平台 后两种是扩展方法, 只适用于java平台 。
1、 DOM解析 :JDK它们都有自己的,因此无需再次指导包装。解析器需要传输整个XML这些文件都被加载到内存物种中以生成一个。Document对象。
- 优点:保留了元素和元素之间的结构和关系,可以添加、删除、修改和检查元素。
- 缺点:XML文件太大,可能导致内存溢出。
2、 SAX解析 :是一种更快、更高效的解析方法。 逐行扫描
的, 侧扫描侧分辨率
,并且以 事件驱动方法
为了执行特定的解析,每个解析行都会触发一个事件。
- 优点:没有内存溢出问题可以处理大文件。
- 缺点:智能阅读,无法书写
1.2 解析器
解析器是根据不同的解析方法提供具体的实现,以方便开发人员进行解析。XML,有一些方便的类库。
- dom4j:相对简单XML解析的类库
- Jsoup:是一个强大的DOM以某种方式解析的类库,尤其是HTML分析更方便。
二、使用dom4j解析XML
2.1 搭建环境
创建一个
maven
项目
将项目的maven图书馆被改为本地仓库。
加入依赖
org.dom4j
dom4j
2.1.3
在
resources
在根目录下创建user.xml
文件,
并在 user.xml
将以下内容添加到文件中
10001
admin
111111
10002
tony
666666
2.2 解析XML文件
解决步骤简介
1,创建分析器对象。
//创建分析器对象
SAXReader saxReader = new SAXReader();
2,使用解析器对象进行读取。XML文档生成Document对象
Document document = saxReader.read(Dom4jParseUserXmlTest.class.getClassLoader().getResource("user.xml"));
3、根据Document对象获取XML的元素(标签信息)
//3.1 获取XML文件的根节点
Element rootElement = document.getRootElement();
System.out.println("user.xml文件的根节点的名称为"+rootElement.getName());
//3.2 获取XML文件根节点下的子节点。
System.out.println("获取根标签users子标签列表");
List usersSubElementList = rootElement.elements();
for (Element userElement : usersSubElementList) {
//String attributeValue(String name);获取指定属性名称的属性值。。。
System.out.println("users标签的子标签"+userElement.getName());
System.out.println("users标签的子标签。id属性值是"+userElement.attributeValue("id"));
System.out.println("users标签的子标签。country属性值"+userElement.attributeValue("country"));
System.out.println("users标签的子标签。sources属性值"+userElement.attributeValue("source"));
System.out.println("3、获取user子标签列表");
创建名称
Dom4jParseUserXmlTest
类,并添加以下内容,开始解析
package com.li.dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.List;
/**
* @author potential
*/
public class Dom4jParseUserXmlTest {
public static void main(String[] args) {
//1,创建分析器对象。
SAXReader saxReader = new SAXReader();
//2,使用解析器对象进行读取。XML文档生成Document对象
try {
Document document = saxReader.read(Dom4jParseUserXmlTest.class.getClassLoader().getResource("user.xml"));
//3、根据Document对象获取XML元素标签信息
/**
* 1、org.dom4j.Document常用方法
* Element getRootElement(); 获取XML文件的根节点
* 2、org.dom4j.Element常用方法
* String getName();返回
* Listelements();获取标签的子标签
*/
//3.1 获取XML文件的根节点
Element rootElement = document.getRootElement();
System.out.println("user.xml文件的根节点的名称为"+rootElement.getName());
//3.2 获取XML文件根节点下的子节点。
System.out.println("获取根标签users子标签列表");
List usersSubElementList = rootElement.elements();
for (Element userElement : usersSubElementList) {
//String attributeValue(String name);获取指定属性名称的属性值。。。
System.out.println("users标签的子标签"+userElement.getName());
System.out.println("users标签的子标签。id属性值是"+userElement.attributeValue("id"));
System.out.println("users标签的子标签。country属性值"+userElement.attributeValue("country"));
System.out.println("users标签的子标签。sources属性值"+userElement.attributeValue("source"));
System.out.println("3、获取user子标签列表");
List userSubElementList = userElement.elements();
for (Element userSubElement : userSubElementList) {
System.out.println("user标签下的子标签名称为"+userSubElement.getName());
//String getText(); 获取标签的文本
System.out.println("user标签下的子标签文本为"+userSubElement.getText());
}
}
//获取users第一个标签user标签
Element firstUserElement = rootElement.element("user");
//获得第一个user标签下的子标签password属性的文本
//String elementText(String name); 获取指定名称的子标签的文本。。
String password = firstUserElement.elementText("password");
System.out.println("第一个user标签的子标签password的文本"+password);
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
操作结果显示
2.3 dom4j重要API说明
org.dom4j.Document常用方法
Element getRootElement()
获取XML文件的根节点
org.dom4j.Element常用方法
String getName()
返回元素名称
Listelements()
获取标签的子标签
String attributeValue(String name)
获取指定属性名称的属性值。。。
String getText()
获取标签的文本
String elementText(String name)
获取指定名称的子标签的文本。
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除