操作xml数据——Dom解析(备忘)

一、概述:
用xml保存数据,一般只适用于单机且数据量不大,安全级别低的情况。常用的xml解析技术,有DOM和SAX。

DOM技术

SAX技术

基于xml文档树结构的解析;

适用于多次访问的xml文档。

比较消耗资源。

基于事件的解析;

适用于大数据量的xml文档。

占用资源少,内存消耗小。

二、DOMDocument Object Model)解析技术

1、DOM概述

DOM树:

DOM解析:如下图找寻这些节点,然后对这些节点进行相关操作,用这样的思路操作xml文件,我们就称之为DOM解析。

在DOM接口规范中,有四个基本的接口:Document , Node ,NodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,像Document,Element,  Attribute, Text, Comment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。

2、Document

Document接口代表了整个xml/html文档,因此,它是整棵文档数的根,提供了对文档中的数据进行访问和操作的入口。

常用方法

说明

getElementsByTagName(String tagName)

按文档顺序返回文档中指定标记名称的所有元素集合

createElement(String tagName)

创建指定标记名称的元素

3、Node

常用方法

说明

NodeList getChildNodes()

获取该元素的所有子节点,返回为节点集合。

4、Element

常用方法

说明

String getTagName()

元素名称

5、Node与Element的区别:

Node表示文档树中的任意一种类型节点,可以是元素节点、属性节点或文本节点等多种节点;而Element则只表示Node节点中的元素节点,即Node是Element的父接口。

6、读取xml文件

使用DOM解析xml文档的步骤主要有:

(1)创建解析器工厂对象;

(2)由解析器工厂对象创建解析器对象;

(3)由解析器对象对指定xml文件进行解析,构建相应DOM树,创建Document对象;

(4)以Document对象为起点对DOM树的节点进行增删改查操作;

7、程序解释:

(1)创建解析器工厂对象DocumentBuilderFactory;通过下列代码获得:

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();我们创建解析器工厂对象是为了获得解析器对象。当DocumentBuilderFactory类的静态方法newInstance()被调用时,它根据一个系统变量来决定具体使用哪一个解析器。这个用了工厂模式。

(2)由解析器工厂对象创建解析器对象DocumentBuilder;通过下列代码获得:

DocumentBuilder db=dbf.newDocumentBuilder();通过工厂对象的newDocumentBuilder()方法来获得DocumentBuilder对象,这个对象代表了具体的DOM解析器。

(3)由解析器对象对指定xml文件进行解析,构建相应DOM树,创建Document对象。通过下列代码获得:Document doc=db.parse(C:/xml/message.xml);

DocumentBuilder的parse()方法接受一个xml文档名作为输入参数,返回一个Document对象,这个Document对象就代表了一个xml文档的树模型。以后所有的对xml文档的操作,都与解析器无关,直接在这个Document对象上进行操作就可以了。而具体对Document操作的方法,就是由DOM所定义的了。

(4)从上面得到的Document对象开始,我们就可以进行DOM解析了。使用Document对象的getElementsByTagName()方法,得到一个NodeList对象,一个Node对象代表了一个xml文档中的一个标签元素(元素节点),然后我们可以通过NodeList对象的item()方法来得到列表中的每一个Node对象。

v 怎么获得该元素节点的文本内容

然后通过Node的getFirstChild().getNodeValue()来得到该元素节点的文本内容。

这个getFirstChild()方法必须加上,因为它主要和W3C对DOM的定义有关。

还有就是Brand节点下可能有子元素节点,或者其属性,那么又应该怎么获取其内容呢?

v 怎么获取Brand节点(元素节点)的属性内容

v 怎么获取Brand节点(元素节点)的子节点(元素节点)集合:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值