1.4XML解析概述

1.4.1 XML解析概述

当将数据存储在XML后,我们就希望通过程序获得XML的内容。如果我们使用Java基础所学习的IO知识是可以完成的,不过你需要非常繁琐的操作才可以完成,且开发中会遇到不同问题(只读、读写)。人们为不同问题提供不同的解析方式,并提交对应的解析器,方便开发人员操作XML。

1.4.2 解析方式和解析器

开发中比较常见的解析方式有三种,如下:
1.DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。
	a)优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
	b)缺点:XML文档过大,可能出现内存溢出显现。
2.SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件。(了解)
	a)优点:处理速度快,可以处理大文件
	b)缺点:只能读,逐行后将释放资源。
3.PULL:Android内置的XML解析方式,类似SAX。(了解)
  • 解析器:就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包。

[外链图片转存失败(img-8BcvIyHB-1562192873794)(pics/搜狗截图20190520111918.png)]

  • 常见的解析开发包

JAXP:sun公司提供支持DOM和SAX开发包

JDom:dom4j兄弟

jsoup:一种处理HTML特定解析开发包

dom4j:比较常用的解析开发包,hibernate底层采用。

1.4.3 DOM解析原理及结构模型

XML DOM 将整个XML文档加载到内存,生成一个DOM树,并获得一个Document对象,通过Document对象就可以对DOM进行操作

[外链图片转存失败(img-GMBr0oo0-1562192873795)(pics/搜狗截图20190520112036.png)]

DOM中的核心概念就是节点,在XML文档中的元素、属性、文本等,在DOM中都是节点!

[外链图片转存失败(img-DJ0OpY3l-1562192873795)(pics/搜狗截图20190520112059.png)]

1.4.5 API使用

如果需要使用dom4j,必须导入jar包。

[外链图片转存失败(img-non9q8Xi-1562192873796)(pics/搜狗截图20190520112135.png)]

dom4j 必须使用核心类SaxReader加载xml文档获得Document,通过Document对象获得文档的根元素,然后就可以操作了。

常用API如下:

  1. SaxReader对象

a) read(…) 加载执行xml文档

  1. Document对象

a) getRootElement() 获得根元素

  1. Element对象

a) elements(…) 获得指定名称的所有子元素。可以不指定名称

b) element(…) 获得指定名称第一个子元素。可以不指定名称

c) getName() 获得当前元素的元素名

d) attributeValue(…) 获得指定属性名的属性值

e) elementText(…) 获得指定名称子元素的文本值

f) getText() 获得当前元素的文本内容

public static void main(String[] args) throws Exception {
		SAXReader sax = new SAXReader();
		Document document = sax.read("beans.xml");
		
		Element elemRoot = document.getRootElement();
		
		List<Element>list = elemRoot.elements();
		for(Element element : list){
			String id =element.attributeValue("id");
			String className = element.attributeValue("className");
			System.out.println(id+""+className);
			
			List<Element>listElem = element.elements();
			for(Element elem : listElem){
				String name = elem.attributeValue("name");
				String value = elem.attributeValue("value");
				System.out.println(name+""+value);
			}
		}
	}
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans>
  <bean id="001" className="com.baidu.demo.User">
    <property name="user" value="jacl"></property>
    <property name="user" value="rose"></property>
  </bean>

  <bean id="002" className="com.baidu.demo.Admin">
    <property name="user" value="admin"></property>
    <property name="user" value="write"></property>
  </bean>
</beans>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值