小编给大家分享一下XML解析中DOM解析的案例分析,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!
<强>一、概念强>
XML文件多用于信息的描述,所以在得到一个XML文档之后按XML中照的元素取出对应的信息就是XML的解析. XML解析有两种方式,一种是DOM解析,另一种是SAX解析,两种操作的方式如图。
<强>二、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转换为树的结构为:
DOM解析中有以下4个核心操作接口
文档:此接口代表了整个xml文档,表示为整个DOM的根,即为该树的入口,通过该接口可以访问xml中所有元素的内容。其常用方法如下。
(注:上述图中虽未画出,但是姓名和电子邮件的属性也分别为一个节点)
文档常用方法
节点:此接口在整个DOM树中有着举足轻重的地位,DOM操作的核心接口都继承于节点(文档、元素Attr)。在DOM树中,每一个节点接口代表了一个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 ()); } } }