第6章_DOM解析器3

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第6章DOM解析器2本章主要内容DOM解析器节点类型Document节点Element节点Text节点Attr节点DocumentType节点处理空白使用DOM生成XML文件3概述XML解析器是XML和应用程序之间的一个软件组织,为应用程序从XML文件中解析出所需要的数据。有两种类型的解析器基于DOM的解析器基于事件的解析(SAX)45DOM接口概述DOM是DocumentObjectModel缩写,文档对象模型。DOM是一个文件对象所组成的模型。对XML应用开发来说,DOM就是一个对象化的XML数据接口.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。6DOM可以看作是一组对XML文档进行访问的API,应用程序开发者能够使用编程语言来调用DOM对象的属性与方法,达到访问、操作XML文档各个组成部分的目的。DOM对象映射了XML文档的树状结构,这个树状结构就是一棵根据XML文档生成的节点树。7DOM结构树DOM以树状的层次节点来储存XML文档中的所有数据,可以使用DOM节点树来访问任何形式的XML文档,并且可以使用DOM提供的编程接口来显示和操纵XML文档中的任何组件,包括元素、属性、处理指令、注释及实体等。解析XML文档,首先利用DOM解析器加载到内存中,形成一个结构树。DOM就是XML文档在内存中的一个结构化的视图结构树中,有一个根节点,XML文档的每一个元素都是一个节点,每一个节点都可以包含自己的节点子树8DOM结构树9DOM对象DOM结构树中每一个节点都是一个对象DOM基本接口Document接口-文档对象Node接口-节点对象,Element接口、Attr接口、Text接口、CDATASection接口继承该接口NodeList接口-节点有序集合,活动的NamedNodeMap接口-通过名字访问的节点无序集合,主要用于属性注意:接口是一组方法声明的集合,没有具体实现10定义XML文件——dom_demo_01.xml?xmlversion=1.0encoding=GBK?addresslistlinkmanname李兴华/nameemailmldnqa@163.com/email/linkmanlinkmannameMLDN/nameemailmldnkf@163.com/email/linkman/addresslist11形成DOM树12初识JAXP按着W3C制定的DOM规范,Sun公司发布的JDK1.4的后续版本中提供了解析XML文件的API(JavaAPIforXMLParsing,JAXP),JAXP实现了DOM规范的Java语言绑定,给出了DOM规范指定的接口,并给出实现这些接口的类的集合13核心操作接口在DOM解析中有以下四个核心的操作接口:Document:此接口代表了整个XML文档,表示的是整棵DOM树的根,提供了对文档中的数据进行访问和操作的入口,通过Document节点可以访问XML文件中所有的元素内容Node:此接口在整个DOM树中具有举足轻重的地位,DOM操作的核心接口中有很大一部分接口是从Node接口继承过来的。例如:Document、Element、Attri等接口,如图3-9所示。在DOM树中,每一个Node接口代表了DOM树中的一个节点NodeList:此接口表示的是一个节点的集合,一般用于表示有顺序关系的一组节点,例如:一个节点的子节点,当文档改变的时候会直接影响到NodeList集合NamedNodeMap:此接口表示的是一组节点和其唯一名字对应的一一对应关系,本接口主要用于属性节点的表示上14初识JAXP使用javax.xml.parsers包中的DocumentBuilderFactory类DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();得到DocumentBuilder对象(javax.xml.parsers包),称做DOM解析器DocumentBuilderdomParser=factory.newDocumentBuilder();步骤2中得到的DOM解析器解析指定的XML文件,返回实现了Document接口的实例(org.w3c.dom包)Documentdocument=domParser.parse(newFile(student.xml));15DOM的四个基本接口介绍Document接口Document接口表示整个HTML或XML文档。它不仅指文档的根,并提供对文档数据的基本访问。Document接口是对文档进行操作的入口,它是从Node接口继承过来的。该接口位于org.w3c.dom包中。该接口的常用方法有以下几种:ElementcreateElement(StringtagName)方法:创建指定类型的元素。NodeadoptNode(Nodesource)方法:试图把另一文档中的节点采用到该文档中。AttrcreateAttribute(Stringname)方法:根据给定的名称name创建Attr。NodeListgetElementsByTagName(Stringtagname)方法:按文档顺序返回包含在文档中且具有给定标记名称的所有元素的列表。TextcreateTextNode(Stringdata)方法:根据给定字符串data创建Text节点。NodeimportNode(NodeimportedNode,booleandeep)方法:将另一文档的importedNode节点插入到该文档中,而不改变或移除原始文档中的原节点。ElementgetElementById(Stringelement)方法:返回名为element的Element对象。16NodeList接口NodeList接口提供对节点的有序集合的抽象,没有定义或约束如何实现此集合。该接口位于org.w3c.dom包中,NodeList对象是不断变化的。intgetLength()方法:列表中的节点数。Nodeitem(intindex)方法:返回集合中的索引为index的节点。如果index大于或等于此列表中的节点数,则返回null。主要方法有以下两个:17Node接口Node接口是其他大多数接口的父类,像Document、Element、Attribute、Text、Comment等接口都是从Node接口继承过来的。它表示该文档树中的单个节点。常用的方法有以下几种:NodeappendChild(NodenewChild)方法:将节点newChild添加到此节点的子节点列表的末尾。NamedNodeMapgetAttributes()方法:返回包含此节点的属性的NamedNodeMap对象;否则为null。NodegetFirstChild()方法:此节点的第一个子节点。NodegetLastChild()方法:此节点的最后一个节点。NodegetNextSibling()方法:直接在此节点之后的节点。StringgetNodeValue()方法:此节点的值,取决于其类型;NodegetParentNode()方法:此节点的父节点。NoderemoveChild(NodeoldChild)方法:从子节点列表中移除oldChild所指示的子节点,并将其返回。注意:在DOM中每个元素的字符数据(元素值)也是一个Node对象。18NodeList和Node示例importjavax.xml.parsers.*;importorg.w3c.dom.*;publicclassTestNode{publicstaticvoidmain(Stringargs[]){try{DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=factory.newDocumentBuilder();Documentdoc=builder.parse(test.xml);NodeListlist=doc.getElementsByTagName(student);for(inti=0;ilist.getLength();i++){Elementnode=(Element)list.item(i);System.out.print(name:);System.out.println(node.getElementsByTagName(name).item(0).getFirstChild().getNodeValue());System.out.print(age:);System.out.println(node.getElementsByTagName(age).item(0).getFirstChild().getNodeValue());System.out.print(address:);System.out.println(node.getElementsByTagName(address).item(0).getFirstChild().getNodeValue());System.out.println();}}catch(Exceptione){e.printStackTrace();}}}打印address元素的信息打印元素name的信息打印age元素的信息19test.xml文件的内容如下:classstudentnamezhangsan/nameage20/ageaddresschina/address/studentstudentnamelisi/nameage25/ageaddresschina/address/student/class运行效果图20NamedNodeMap接口实现NamedNodeMap接口的对象用于表示可以通过名称访问的节点的集合。NamedNodeMap表示的是一组节点和其唯一名称的一一对应关系,这个接口主要用在属性节点的表示上。在实现NamedNodeMap的对象中所包含的Node对象还可以通过顺序索引进行访问,但并不意味着DOM指定这些节点的顺序。在DOM中NamedNodeMap对象也是不断变化的。21NamedNodeMap接口主要方法NamedNodeMap接口主要有以下几种方法:intgetLength()方法:返回该NamedNodeMap对象中的节点数。NodegetNamedItem(Stringname)方法:返回名称为name的节点。NodegetNamedItemNS(StringnamespaceURI,StringlocalName)方法:返回通过本地名称和名称空间URI所指定的节点。NoderemoveNamedItemNS(StringnamespaceURI,StringlocalName)方法:移除通过本地名称和名称空间URI所指定的节点。Nodeitem(intindex)方法:返回索引值为index的项。NoderemoveNamedItem(Stringname)方法:移除名称为name的节点。NodesetNamedItemNS(Nodearg)方法:使用其namespaceURI和localName添加节点。NodesetNamedItem(Nodearg)方法:使用节点名称添加节点。22importjavax.xml.parsers.*;importorg.w3c.dom.*;publicclassTestNamedNodeMap{publicstaticvoid

1 / 44
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功