加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML解析----dom4j解析

发布时间:2020-12-16 08:05:51 所属栏目:百科 来源:网络整理
导读:前言: 开发中将数据存储在xml后,希望通过程序获得xml的内容,获取的方式有很多种,开发中比较常见的解析方式有三种:DOM解析,SAX解析、PULL解析,它们各自有各自的优缺点和应用的场景。 三种解析方式: 1、DOM:要求解析器把整个xml文档装载到内存,解析

前言:

开发中将数据存储在xml后,希望通过程序获得xml的内容,获取的方式有很多种,开发中比较常见的解析方式有三种:DOM解析,SAX解析、PULL解析,它们各自有各自的优缺点和应用的场景。

三种解析方式:

1、DOM:要求解析器把整个xml文档装载到内存,解析成一个Document对象。

优点:元素与元素之间保持结构关系,可以进行增删改查操作。

缺点:xml文档过大时可能出现内存溢出显示。

2、SAX:是一种速度更快,更有效的方法。它逐行扫描文档,边扫描编解析,并以件驱动的方式进行具体解析,每执一行,都将触发对应的事件。

优点:出来速度快,可以处理大文件。

缺点:只读,逐行后将释放资源。

3、PULL:Android内置的xml解析方式,和SAX类似。

解析器是根据不同的解析方式提供的具体实现,但有的解析器操作过于繁琐,由此,为了方便开发,提供了易于操作的解析开发包。

常见的解析开发包:JAXP、JDom(dom4j兄弟)、jsoup、dom4j(较常用)

实践:

XML DOM和HTML DOM类似,它将整个xml文档加载到内存,生成一个DOM树,并获得一个Document对象,通过Document对象可以对DOM进行操作。

1、使用dom4j前提,导入jar包


dom4j使用核心类SaxReader加载xml文档获得Document,通过Document对象获得文档的跟元素,然后再进行操作。

2、目录结构:


3、web.xml

在xml中使用Schema约束,必须包含制定的命名空间。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://www.example.org/web-app_2_5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
	version="2.5">

	<servlet>
		<servlet-name>helloDOM4j</servlet-name>
		<servlet-class>**********</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>helloDOM4j</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>
</web-app>
4、TestDom4j.java

package cn.ytm.xml.dom4j;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

public class TestDom4j {
	@Test
	public void testReadWebXML(){
		try {
			//1、获取解析器
			SAXReader saxReader=new SAXReader();
			//2、获取document文档对象
			Document doc=saxReader.read("src/cn/ytm/xml/schema/web.xml");
			//3、获取根元素
			Element rootElement=doc.getRootElement();
			System.out.println(rootElement.getName());  //获取根元素的名称
			System.out.println(rootElement.attributeValue("version"));//获取元素中的属性值
			//4、获取跟元素下的子元素
			List<Element> childElements=rootElement.elements();
			//5、遍历子元素
			for (Element element : childElements) {
				//6、判断元素名称为servlet的元素
				if ("servlet".equals(element.getName())) {
					//7、获取servlet-name元素
					Element servletName=element.element("servlet-name");
					//8、获取servlet-class元素
					Element servletClass=element.element("servlet-class");
					System.out.println(servletName.getText());
					System.out.println(servletClass.getText());
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}	
	}	
}

结果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读