XML解析中DOM解析的案例分析

  介绍

小编给大家分享一下XML解析中DOM解析的案例分析,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!

<强>一、概念

XML文件多用于信息的描述,所以在得到一个XML文档之后按XML中照的元素取出对应的信息就是XML的解析. XML解析有两种方式,一种是DOM解析,另一种是SAX解析,两种操作的方式如图。

 XML解析中DOM解析的案例分析

<强>二、DOM解析

基于DOM解析的XML分析器是将其转换为一个对象模型的集合,用树这种数据结构对信息进行储存。通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此这种利用DOM接口访问的方式也被称为随机访问。

这种方式也有缺陷,因为DOM分析器将整个XML文件转换为了树存放在内存中,当文件结构较大或者数据较复杂的时候,这种方式对内存的要求就比较高,且对于结构复杂的树进行遍历也是一种非常耗时的操作,不过DOM所采用的树结构与XML存储信息的方式相吻合,同时其随机访问还可利用,所以DOM接口还是具有广泛的使用价值。

这里我们举个栗子来说明XML转换为树的数据结构。

& lt; ?xml version=?.0”;编码=癎BK" ?比;   & lt; address>   & lt; linkman>   & lt; name> Van_DarkHolme   & lt; email> van_darkholme@163.com   & lt;/linkman>   & lt; linkman>   & lt; name> Bili   & lt; email> Bili@163.com   & lt;/linkman>   & lt;/address>

将该xml转换为树的结构为:

 xml解析中DOM解析的案例分析

DOM解析中有以下4个核心操作接口

文档:此接口代表了整个xml文档,表示为整个DOM的根,即为该树的入口,通过该接口可以访问xml中所有元素的内容。其常用方法如下。

(注:上述图中虽未画出,但是姓名和电子邮件的属性也分别为一个节点)

文档常用方法

 xml解析中DOM解析的案例分析

节点:此接口在整个DOM树中有着举足轻重的地位,DOM操作的核心接口都继承于节点(文档、元素Attr)。在DOM树中,每一个节点接口代表了一个DOM树节点

节点接口常用方法

 xml解析中DOM解析的案例分析

节点列表:此接口表示一个点的集合,一般用于有序关系的一组节点。

节点列表常用方法

 xml解析中DOM解析的案例分析

NamedNodeMap:此接口表示一组节点和其唯一名称对应的一一关系,主要用于节点属性的表示

除了以上四个核心接口外,如果一个程序需要进行DOM解析操作,则需要按照如下步骤进行:

1。建立DocumentBuilderFactor,用于获得DocumentBuilder对象:

DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance ();

2。建立DocumentBuidler:

DocumentBuilder builder=factory.newDocumentBuilder ();

3。建立文档对象,获取树的入口:

文档doc=builder.parse (“xml文件的相对路径或者绝对路径”);

4。建立节点列表:

节点列表n1=doc.getElementByTagName(“读取节点”),

5。进行xml信息获取

公共类DOMDemo01 {      公共静态void main (String [] args)抛出ParserConfigurationException, SAXException, IOException {//建立DocumentBuilderFactor,用于获得DocumentBuilder对象:   DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance ();//2 .建立DocumentBuidler:   DocumentBuilder builder=factory.newDocumentBuilder ();//3 .建立文档对象,获取树的入口:   文档doc=builder.parse (“src//dom_demo_02.xml");//4 .建立节点列表:   节点列表节点=doc.getElementsByTagName (“linkman");//5 .进行xml信息获取   for (int i=0; i< node.getLength();我+ +){   元素e=(元素)node.item(我);   System.out.println(“姓名:“+   e.getElementsByTagName (“name") .item (0) .getFirstChild () .getNodeValue ());   System.out.println(“邮箱:“+   e.getElementsByTagName (“email") .item (0) .getFirstChild () .getNodeValue ());   }      }   }

 XML解析中DOM解析的案例分析

XML解析中DOM解析的案例分析