学软件开发,到蜂鸟科技!-第1页-学软件开发,到蜂鸟科技!地址:郑州市文化路丰产路口东50米丰产路21号SOHO世纪城西塔20楼F电话:0371-63839606手机:13838505572(申老师)13673990036(许老师)QQ:10734226431群:476147382群:108157678郑州软件开发兴趣小组群:38236716网址:郑州软件开发兴趣小组群:38236716学软件开发,到蜂鸟科技!-第2页-学软件开发,到蜂鸟科技!地址:郑州市文化路丰产路口东50米丰产路21号SOHO世纪城西塔20楼F电话:0371-63839606手机:13838505572(申老师)13673990036(许老师)QQ:10734226431群:476147382群:108157678郑州软件开发兴趣小组群:38236716网址:目录一、XML简介..............................................................................................31.1概述.................................................................................................................................31.2民间盛行的四种对XML的解析方式.......................................................................................3二、预备知识..............................................................................................31.1有关文档对象模型(DOM)............................................................................................41.2对DOM操作的各种招式..................................................................................................5三、实例解析XML.....................................................................................63.1前情提要...........................................................................................................................63.2DOM方式解析XML..........................................................................................................83.3DOM4J方式解析XML.....................................................................................................16四、结束语................................................................................................26学软件开发,到蜂鸟科技!-第3页-学软件开发,到蜂鸟科技!地址:郑州市文化路丰产路口东50米丰产路21号SOHO世纪城西塔20楼F电话:0371-63839606手机:13838505572(申老师)13673990036(许老师)QQ:10734226431群:476147382群:108157678郑州软件开发兴趣小组群:38236716网址:一、XML简介1.1概述XML(ExtensibleMarkuplanguage)在世界上的应用广泛性就如同眼镜在程序员中应用的广泛性一样,它与HTML一样,都出生于SGML,可用于简单的数据存储。对我们即将要学习如何在Java中使用它的同志们来说,有一个很好的消息要告诉大家:它很简单易学。与数据库老大们(Acess,SQL,Oracle)不同,这些老大们提供了非常强大的数据分析、操作和存储能力,例如:索引,排序,增删改查,存储过程,游标,触发器等,XML能做到的,仅仅是展示和结构化数据信息而已,但是呢,“非常简单”使他与众不同。在J2EE开发中,我们经常会看到他们那苗条的身影:启动Tomcat初始化配置文件的时候,以及著名的struts,hibernate,spring框架中,他们是如何解析这些配置文件又是如何把他们转化为对象随心所欲的使用的呢?下面,我们就掀开她们的盖头,欣赏一下她们的容颜。1.2民间盛行的四种对XML的解析方式Java生活中我们经常需要对XML进行解析以方便我们对数据进行操作,下面介绍在民间盛行的四种使用Java解析XML的方法,其中重点介绍DOM方式和DOM4J方式。DOM(JAXPCrimson解析器):W3C为HTML和XML分析器制定的标准接口规范,基于树,可随机动态访问和更新文档的内容、结构、样式。SAX(simpleAPIforXML):不是W3C的标准,而是由XML-DEV邮件列表成员于1998年为Java语言开发的一种基于事件的简单API。基于事件,逐行解析,顺序访问XML文档,速度快,处理功能简单。JDOM:鉴于DOM的低效率,而SAX又不能随机处理XML文档,JasonHunter与BrettMcLaughlin于2000年春天,开始创建一种能充分体现两者优势的API——JDOM(Java-basedDOM,基于Java的DOM),它是一个基于Java的对象模型,树状结构,能使读取、操作和写入XML文档,比DOM更高效,比SAX更强大,但由于使用了大量的类而不使用接口导致灵活性降低。DOM4J:DOM4J是一个易用的,开源的库,用于XML,XPath,XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX,JAXP。它提供了大量的接口,因此比JDOM更具有灵活性。二、预备知识学软件开发,到蜂鸟科技!-第4页-学软件开发,到蜂鸟科技!地址:郑州市文化路丰产路口东50米丰产路21号SOHO世纪城西塔20楼F电话:0371-63839606手机:13838505572(申老师)13673990036(许老师)QQ:10734226431群:476147382群:108157678郑州软件开发兴趣小组群:38236716网址:有关文档对象模型(DOM)DOM(文档对象模型),W3C实现了DOM操作的规范化,并为多种语言提供了操作DOM的接口,如C,java,Javascript等等。对象模型的构建是以面向对象的思想为基础,通过对问题进行抽象,构造出一组相关的模型,从而能够全面地捕捉问题空间的信息。而我们这里要介绍的文档对象模型通常是以树的形式对相关文档进行抽象,构建出由节点构成的文档树模型,从而实现更方便的对文档的各种操作。节点:XML文档中的所有节点组成了一个文档树(或节点树)。XML文档中的每个元素、属性、文本等都代表着树中的一个节点。树起始于文档节点,并由此继续伸出枝条,直到处于这棵树最低级别的所有文本节点为止,常用节点类型如表2-1所示:节点类型附加说明实例元素节点(Element)XML标记元素company…/company属性节点(Attribute)XML标记元素的属性name=”ntcsoft”文本节点(Text)包括在XML标记中的文本段工程师A文档类型节点(DocumentType)文档类型声明﹤!DOCTYPE…﹥注释节点CommentXmlComment类注释节点。!—文档注释表2-1节点关系:下面我们从一个XML文档实例中了解一下各个节点之间的关系:companyname=ntcsoftdepartmentemployeeposition=developer工程师A/employee/departmentdepartmentname=education/department/company通过上面的XML文档,我们构建出如下树状文档对象模型,如图2-1所示:图2-1文档根元素节点company元素节点department元素节点department元素节点employee属性节点name文本节点工程师A属性节点position属性节点name根节点父到子子到父下一节点上一节点firstChildlastChild学软件开发,到蜂鸟科技!-第5页-学软件开发,到蜂鸟科技!地址:郑州市文化路丰产路口东50米丰产路21号SOHO世纪城西塔20楼F电话:0371-63839606手机:13838505572(申老师)13673990036(许老师)QQ:10734226431群:476147382群:108157678郑州软件开发兴趣小组群:38236716网址:所示:属性描述nodeName结点名称nodeValue结点内部值,通常只应用于文本结点nodeType节点类型对应的数字parentNode如果存在,指向当前结点的父亲结点childNodes子结点列表firstChild如果存在,指向当前元素的第一个子结点lastChild如果存在,指向当前元素的最后一个子结点previousSibling指向当前结点的前一个兄弟结点nextSibling指向当前结点的后一个兄弟结点attributes元素的属性列表表2-2常用节点方法如表2-3所示:操作类型方法原型描述访问节点getElementById(id)根据ID属性查找元素节点getElementsByName(name)根据name属性查找元素集getElementsByTagName(tagName)根据元素标记名称查找元素集创建节点createElement(tagName)创建元素节点createTestNode(string)创建文本节点createAttribute(name)创建属性节点插入和添加节点appendChild(newChild)添加子节点到目标节点上insertBefore(newChild,targetChild)将newChild节点插入到targetChild节点之前复制节点CloneNode(bool)复制该节点,由bool确定是否复制子节点删除和替换节点removeChild(childName)删除由childName指定的节点replaceChild(newChild,oldChild)用newChild替换oldChild属性节点操作getAttribute(name)返回目标对象指定属性名称为name的属性值setAttribute(name,value)修改目标节点指定属性名称为name的属性值为valueremoveAttribute(name)删除目标节点指定属性名称为name的属性表2-3学软件开发,到蜂鸟科技!-第6页-学软件开发,到蜂鸟科技!地址:郑州市文化路丰产路口东