您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页DOM解析其中的NodeList

DOM解析其中的NodeList

来源:化拓教育网


DOM解析其中的NodeList

首先跟大家介绍一下。对XML文档的解析有两种方式,一种是w3c组织推荐的DOM(Document Object Model)解析方式,另一个是SAX(Simple API for XML)解析方式,他不是官方标准,但是XML社区事实上的标准。下面主要讲一下DOM解析方式的原理,至于SAX的解析原理大家可以去查找相关资料。

为了讲解DOM对XML文档的解析原理,我们先来看下面的XML文档的例子library.xml。DOM方式解析xml文档,先把整个文档加载到内存中,然后把所有的标签变成

Element对象,文本则变成Text对象,属性则变成Attribute对象,最后返回一个树形结构的Doucument对象。所以library.xml文档加载到内存中后返回的树形Document对象是,如下图。

当返回Document对象后就可以对xml文档进行解析了。

上面我们了解了DOM的解析原理,下面我们来讲讲NodeList以及我发现的一些小问题。

这里讲NodeList主要是用我写delete()方法来作为实例,该方法是对指定的标签名进行删除操作。而操作的文档仍是library.xml,只是其中增加了两个book标签。刚开始编写的delete()方法代码如下:

运行之后JUnit给我报了一个空指针异常“java.lang.NullPointerException”。既然是空指针异常那我就用Debug跟踪一下,跟踪后才发现当“i”等于2是报了空指针异常,这也就是说NodeList的对象removeList中没有3(NodeList中的元素下标从0开始)个元素。为了知道removeList中到底有多少个元素,我打印出了removeList的长度,打印结果显示为3。从而说明我的代码逻辑没有问题,那问题出在哪了?于是我有重写了代码,代码如下。

运行结果还是给我报了一个空指针异常。最后还是不知道问题在哪,于是就到w3c上去查文档,一查才知道NodeList是一个动态的链表,而不是像我们联想到的java util中的List或ArrayList。NodeList就相当于C中的链表,删除一个元素后链表的长度以及链表中的元素的下标会动态改变,比如链表中有三个元素分别为 element1、element2、element3,他们的下标是0、1、2。当你删除element1后,element2和element3的下标就会变为0、1。所以上面的两份代码都会报出异常。既然知道了问题所在那么问题就好解决了,有与removeList中的元素下标是动态改变的,那么只要removeList不为空,那么下标为0的元素一定存在,所以再次编写后的代码如下。

这一份代码与第一份和相似只有一个地方有改动,就是把第一份代码中“Element removeElement = (Element) removeList.item(i);”的“i”改为0。最后代码运行后也没有报出异常,对xml的操作也正常。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务