赞
踩
XML解析方式有4种,分别是:DOM解析、SAX解析、JDOM解析、DOM4j解析
。其中前两种属于基础方法,是官方提供的与平台无关的解析方式后两种属于扩展方法,是在基础方法上拓展出来的,只适用于java平台。
1、DOM解析:JDK中都自带了,无需再导包。要求解析器将整个XML文件全部加载到内存种,生成一个Document对象。
2、SAX解析:是一种速度更快,更加高效的解析方式,它是逐行扫描
的,边扫描边解析
,并且以事件驱动的方式
来进行具体的解析,每解析一行都会触发一个事件。
解析器就是根据不同的解析方式提供具体的实现,为了方便开发人员解析XML,有一些方便操作的类库。
创建一个
maven
项目
将项目的maven库改为本地仓库
加入依赖
<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
在
resources
根目录下创建user.xml
文件,
并在user.xml
文件中添加如下内容
<?xml version="1.0" encoding="UTF-8" ?>
<users>
<user id="10001" country="Chinese" source="Android">
<id>10001</id>
<name>admin</name>
<password>111111</password>
</user>
<user id="10002" country="Chinese" source="ios">
<id>10002</id>
<name>tony</name>
<password>666666</password>
</user>
</users>
解析步骤介绍
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<Element> 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();返回 * List<Element>elements();获取标签的子标签 */ //3.1 获取XML文件的根节点 Element rootElement = document.getRootElement(); System.out.println("user.xml文件的根节点的名字为"+rootElement.getName()); //3.2 获取XML文件的根节点下的子节点 System.out.println("获取根标签users的子标签列表"); List<Element> 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<Element> 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(); } } }
运行结果展示
org.dom4j.Document常用方法
Element getRootElement() | 获取XML文件的根节点 |
---|
org.dom4j.Element常用方法
String getName() | 返回元素名称 |
---|---|
Listelements() | 获取标签的子标签 |
String attributeValue(String name) | 获取指定属性名称的属性值 |
String getText() | 获取标签的文本 |
String elementText(String name) | 获取指定名称的子标签的文本 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。