您好,欢迎访问一九零五行业门户网

有关XML解析中DOM解析的详细介绍

一、概念
xml文件多用于信息的描述,所以在得到一个xml文档之后按照xml中的元素取出对应的信息就是xml的解析。xml解析有两种方式,一种是dom解析,另一种是sax解析,两种操作的方式如图。
二、dom解析
基于dom解析的xml分析器是将其转换为一个对象模型的集合,用树这种数据结构对信息进行储存。通过dom接口,应用程序可以在任何时候访问xml文档中的任何一部分数据,因此这种利用dom接口访问的方式也被称为随机访问。
这种方式也有缺陷,因为dom分析器将整个xml文件转换为了树存放在内存中,当文件结构较大或者数据较复杂的时候,这种方式对内存的要求就比较高,且对于结构复杂的树进行遍历也是一种非常耗时的操作。不过dom所采用的树结构与xml存储信息的方式相吻合,同时其随机访问还可利用,所以dom接口还是具有广泛的使用价值。
这里我们举个栗子来说明xml转换为树的数据结构。
<?xml version="1.0" encoding="gbk"?><address> <linkman> <name>van_darkholme</name> <email>van_darkholme@163.com</email> </linkman> <linkman> <name>bili</name> <email>bili@163.com</email> </linkman></address>
将该xml转换为树的结构为:
dom解析中有以下4个核心操作接口
document:此接口代表了整个xml文档,表示为整个dom的根,即为该树的入口,通过该接口可以访问xml中所有元素的内容。其常用方法如下。
(注:上述图中虽未画出,但是name和email的属性也分别为一个节点)
document常用方法
node:此接口在整个dom树中有着举足轻重的地位,dom操作的核心接口都继承于node(document、element、attr)。在dom树中,每一个node接口代表了一个dom树节点
node接口常用方法
nodelist:此接口表示一个点的集合,一般用于有序关系的一组节点。
nodelist常用方法
namednodemap:此接口表示一组节点和其唯一名称对应的一一关系,主要用于节点属性的表示
除了以上四个核心接口外,如果一个程序需要进行dom解析操作,则需要按照如下步骤进行:
1. 建立documentbuilderfactor,用于获得documentbuilder对象:
documentbuilderfactory factory = documentbuilderfactory.newinstance();
2. 建立documentbuidler:
documentbuilder builder = factory.newdocumentbuilder();
3. 建立document对象,获取树的入口:
document doc = builder.parse(“xml文件的相对路径或者绝对路径”);
4. 建立nodelist:
nodelist n1 = doc.getelementbytagname(“读取节点”);
5. 进行xml信息获取
public class domdemo01 { public static void main(string[] args) throws parserconfigurationexception, saxexception, ioexception{ //建立documentbuilderfactor,用于获得documentbuilder对象: documentbuilderfactory factory = documentbuilderfactory.newinstance(); //2.建立documentbuidler: documentbuilder builder = factory.newdocumentbuilder(); //3.建立document对象,获取树的入口: document doc = builder.parse("src//dom_demo_02.xml"); //4.建立nodelist: nodelist node = doc.getelementsbytagname("linkman"); //5.进行xml信息获取 for(int i=0;i<node.getlength();i++){ element e = (element)node.item(i); system.out.println("姓名:"+ e.getelementsbytagname("name").item(0).getfirstchild().getnodevalue()); system.out.println("邮箱:"+ e.getelementsbytagname("email").item(0).getfirstchild().getnodevalue()); } }}
上述代码则从第四处开始分析:
通过doc.getelementbytagname(“linkman”)我们获得了一个nodelist,上述xml文件中包含了两个linkman的节点,所以这里nodelist中包含了两个node(都是linkman节点),然后通过循环的方法来获取xml文件中的信息。
element e = (element)node.item(i)获得了linkman节点,即e这里指向了linkman
e.getelementtagname(“name”).item(0).getfirstchild().getnodevalue();
getelementtagname(“name”);获得了该linkman下的所有name节点(其实就1个);
item(0);取第一个name节点(就一个);
getfristchild();获取name节点下的文本节点,即内容van所在的节点(上面已经提到过,文本内容也是一个单独的节点,document方法列表中的createtextnode()就是创建文本节点);
getnodevalue()获得文本节点的值:van_darkholme;
跟多相关问题请访问:xml视频教程
以上就是有关xml解析中dom解析的详细介绍的详细内容。
其它类似信息

推荐信息