XML实用教程 教学课件 ppt 范立锋 第8章 DOM解析器

上传人:E**** 文档编号:89376477 上传时间:2019-05-24 格式:PPT 页数:35 大小:332.01KB
返回 下载 相关 举报
XML实用教程 教学课件 ppt 范立锋 第8章  DOM解析器_第1页
第1页 / 共35页
XML实用教程 教学课件 ppt 范立锋 第8章  DOM解析器_第2页
第2页 / 共35页
XML实用教程 教学课件 ppt 范立锋 第8章  DOM解析器_第3页
第3页 / 共35页
XML实用教程 教学课件 ppt 范立锋 第8章  DOM解析器_第4页
第4页 / 共35页
XML实用教程 教学课件 ppt 范立锋 第8章  DOM解析器_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《XML实用教程 教学课件 ppt 范立锋 第8章 DOM解析器》由会员分享,可在线阅读,更多相关《XML实用教程 教学课件 ppt 范立锋 第8章 DOM解析器(35页珍藏版)》请在金锄头文库上搜索。

1、第8章 DOM解析器,8.1 DOM解析器,8.2 节点的类型,8.3 Document节点,8.4 Element节点,8.5 Text节点,8.6 CDATASection节点,第8章 DOM解析器,8.7 Attr节点,8.8 DocumentType节点,8.9 处理空白,8.10 验证规范性和有效性,8.11 使用DOM生成XML文件,8.12 XML与JSP的结合,基于DOM的解析器称为DOM解析器。DOM解析器解析XML文件的最大特点是把整个XML文件全部加载到内存中,在内存中形成一个与XML文件结构相对应的节点树。然后依据节点的子孙关系来遍历数据。通过DOM解析器处理XML文件

2、效率高,但是,十分消耗系统的资源,比较适合复杂但相对较小的文件。,8.1 DOM解析器,8.1.1 DOM标准,8.1.2 认识DOM解析器,返回,DOM标准,DOM是Document Object Model文档对象模型的缩写,是W3C制定的一套规范。依据DOM规范(http:/www.w3.org/DOM/),DOM是一种与浏览器、平台、语言无关的接口。各种语言可以按照DOM规范去实现这些接口,给出解析文件的解析器。DOM规范中所指的文件相当广泛,其中包括XML文件以及HTML文件。DOM有3个版本:,Level:包括对XML1.0和HTML的支持,每个HTML元素被表示为一个接口。 它包

3、括用于添加、编辑、移动和读取节点中包含的信息的方法等。,Level2:包括了更广泛的W3C推荐技术,比如层叠样式表(CSS)和 名称空间(XMLNamespaces),允许开发人员检测和使用可能适 用于某个节点的名称空间信息。Level2还支持W3C所谓的“事件”, 比如一个文件能对诸如鼠标移动之类的“事件”做出反应。,Level3:包括对创建Document对象(以前的版本将这个任务留给实现,使得 创建通用应用程序很困难)的更好支持、增强的名称空间支持,以 及用来处理文档加载和保存、验证以及XPath的新模块;XPath是在,XSL转换(XSL Transformation)以及其他XML技

4、术中用来选择节点的手段。,返回,认识DOM解析器(1),本书主要介绍Sun公司的DOM解析器,该解析器是支持Level3的解析器。注意区分DOM解析器、JDOM和DOM4J。,Sun公司发布的SDK1.5中包含了DOM解析器解析XML文件所需要的API(Java API for XML Parsing,JAXP),JAXP实现了DOM规范的Java语言绑定。SDK1.5可以在Sun公司网站(http:/)上免费下载。在JAXP中,DOM解析器是一个DocumentBuilder类的实例,下面介绍一下如何创建一个DOM解析器。,认识DOM解析器(2),(1)建立一个解析器工厂,利用这个工厂来获得

5、一个具体的解析器对象:,DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();,DocumentBuilder builder = factory.newDocumentBuilder();,使用DocumentBuilderFacotry的目的是为了创建与具体解析器无关 的程序,当DocumentBuilderFactory类的静态方法newInstance()被调用 时,它根据一个系统变量来决定具体使用哪一个解析器。,(2)factory对象调用它的静态方法newDocumentBuilder()获得一个

6、DocumentBuilder对象,这个对象就是DOM解析器。,认识DOM解析器(3),当获得一个builder对象(DOM解析器)之后,就可以调用该对象的public Document parse(File file)方法来解析文件。解析的内容以对象的形式返回,该对象是实现了Document接口的一个实例,称为Document对象。,Document document= builder.parse(new File(“01.xml“);,builder对象除了调用public Document parse(File file)方法解析文件外,还可以调用其它两个方法:,public Docum

7、ent parse(InputStream in) public Document parse(String uri),返回,8.2 节点的类型,8.2.1 Node接口,8.2.2 NodeList接口,8.2.3 NamedNodeMap接口,返回,Node接口 (1),DOM规范中很多接口都是从Node接口继承而来,在DOM规范中把XML文件的每一个标记、属性、注释、文本内容等都看作节点。一个Node对象代表了一个类型的节点。DOM规范中,不同类型的节点采用不同的整数加以区分。为了保证日后能够容易地对节点类型进行扩充,W3C保留了1200之间的整数,作为不同节点类型的定义。具体对应关系见

8、下表:,Node接口 (2),Node接口定义了所有类型的节点都具有的属性和方法。 见下表:,返回,NodeList接口,NodeList接口提供了对节点集合的抽象定义,用于表示有顺序关系的一组节点。NodeList中的每一个节点都可以通过索引来访问,索引值0表示第一个节点。NodeList接口有两个常用的方法,见下表:,返回,NamedNodeMap接口,通过NamedNodeMap接口中的方法可以方便地对标记的属性进行维护和管理。NamedNodeMap中常用的方法见下表:,返回,8.3 Document节点(1),Document节点代表了整个XML文件,XML文件的所有内容都被封装在一

9、个Document节点内。Document对象提供了对文档中数据进行访问的入口,应用程序可以从该节点的子孙节点中获得整个XML文件的数据。,Document类型节点的两个子节点类型是DocumentType类型和Element类型。 Document节点常用的方法见下表:,8.3 Document节点(2),Document节点常用的方法续表,返回,8.4 Element节点,Element节点是Document的子孙节点,表示标记节点,代表的常量是ELEMENT_NODE。Element节点可以是Element的子节点。Element节点可以使用如下表所示的方法来获得相关的数据。,返回,8.

10、5 Text节点(1),Text节点用来表示XML文件的文本内容,Text节点代表的常量是TEXT_NODE。Text节点可以是Element节点的子节点。,Text节点不仅包括标记的文本内容,还包括标记之间的空白。例如:, text1 text2 ,root节点共有7个子孙节点,其中包括2个Element类型子节点:和。3个Text类型子节点:与之间的空白、与之间的空白和与之间的空白。2个Text类型的孙节点:与之间的文本“text1”和与之间的文本“text2”。,8.5 Text节点(2),获取Text类型的节点中的文本可以使用下面的方法:,String getWholeText(),获

11、取的数据包括所有的内容,包括其中的空白。,对于Text类型的节点使用方法String getNodeName() 返回的结果是:,#text,返回,8.6 CDATASection节点(1),CDATASection节点对应XML文件的CDATA段,表示CDATASection节点的常量是CDATA_SECTION_NODE,CDATASection节点可以是Element节点的子节点。,如果一个XML文件中含有CDATA段,在解析时,节点的计算办法有所特别,例如,XML文件的代码如下:, text1 text2 text3 ,获取CDATASection类型的节点中的文本使用方法:,Stri

12、ng getWholeText(),8.6 CDATASection节点(2),前面的XML文件节点的计算办法是按照各节点在XML文件中出现的顺序先后排列 :,text1 text2 text3,返回,8.7 Attr节点 (1),Attr节点表示属性节点,对应XML文件中标记的属性,对应的常量是ATTRIBUTE_NODE。在XML文件中,属性是作为表示的附加信息,用于补充描述标记,不是标记的子标记。在DOM中,Attr对象是包含在Element对象中的,所以,Attr节点不是Element节点的子节点。,Attr对象常用的方法见下表:,8.7 Attr节点 (2),要获得Element节点

13、的Attr节点需要Element节点调用getAttribute()方法,该方法返回一个NamedNodeMap对象,NamedNodeMap对象由节点组成,这些节点可以转换为Attr节点。,/获取节点的属性列表 NamedNodeMap attrMap = node.getAttributes(); /循环取出每一个属性 for(int j=0;jattrMap.getLength();j+) /转换为属性节点 Attr aNode = (Attr)attrMap.item(j); /输出属性名称和属性值 System.out.print(aNode.getName()+“=“+aNode.

14、getValue()+ “ ;“); ,返回,8.8 DocumentType节点,8.8.1 获取DTD的基本信息,8.8.2 获取实体,DocumentType类型节点是Document节点的一个子节点。 DocumentType类型节点对应XML文件所关联的DTD文件,通过DocumentType节点的子孙关系可以分析并获得DTD文件中的数据。通过Document节点调用getDoctype()方法可以获得该节点的DocumentType类型的子节点。DocumentType类型节点用常量DOCUMENT_TYPE_NODE表示。,返回,获取DTD的基本信息,如果是关联内部的DTD,则D

15、ocumentType类型的节点可以调用getInternalSubset()方法返回内部DTD的内容。,如果一个文件关联一个外部的DTD ,则返回DOCTYPE声明中的 相关信息,假设有如下的DOCTYPE声明:,调用方法:,getName(),getPublicld(),getSystemId(),根标记的名字“root”,正式公用标识符 “-/ISO1234567/sunsang/ForXml/Ch”,外部DTD的名字“01.xml”,返回,获取实体,解析器在解析XML文件时,会将DTD中的实体封装为Eneity节点,Eneity节点用ENTITY_NODE常量表示。DocumentTy

16、pe类型节点调用方法getEntities()方法可以获得全部的实体。该方法返回NamedNodeMap类型的对象,该对象由节点组成,这些节点可以转换为Entity类型的节点。,有两个方法可以获得实体的相关信息:,getTextContent(),返回实体的内容。,getInputEncoding(),如果是外部实体,返回的是解析实 体所使用的编码。如果是内部实体, 返回null。,返回,8.9 处理空白 (1),在编写XML文件时,为了使文件变得美观和易于阅读,通常习惯采用代码缩进的方式,缩进代码就需要在行的前面加上空白区域。例 如:, xiaowang male 25 ,这段代码就包含了6处没有实际意义的空白,解析器在解析的时候并不考虑这么多,解析器会把这些空白全部当成文本数据。所以,输出来,的解析数据包含了空白。如图:,8.9 处理空白 (2),如果想要让解析器忽略这些缩进的空白区域,首先,XML文件必须是有效的XML文件,即在文档类型定义文件中规定了标记是只含有子标记或只含有文本内容。然后,在获得D

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号