使用XML企业应用开发第四卷:XML解析器文档对象模型(DOM)软件工程系谭翔纬使用XML企业应用开发2回顾了解XPath的概念描述上下文结点、定位路径和轴列出所有XPath函数以及它们的使用熟悉使用相关的XSLT元素使用XML企业应用开发3目标DOM是一组独立于语言和平台的应用程序编程接口,描述如何访问和操纵存储在结构化XML文档中的信息DOM可以表示树状结构了解W3C为DOM提供一系列API,以供应用程序调用掌握DOMAPI的核心接口对结点的操作包括读取、添加、删除、替换和创建,掌握用java实现这些操作的方法使用XML企业应用开发4DOM概述简单说,DOM是一组独立于语言和平台的应用程序编程接口,它能够描述如何访问和操纵存储在XML和HTML文档中的信息。DOM的文档结构DOM文档是由树状结构表示的。树的每一个点都称之为结点。使用XML企业应用开发5示例DocumentElement:TeamsElement:TeamElement:TeamnameElement:CountryElement:MemberText:ACMilanText:ItalyAttr:AgeAttr:SexText:32Text:maleDOM文档树表示Text:Pippo使用XML企业应用开发6DOM工作方式XML文档XML解析器文档对象模型(树状结构视图)应用程序将XML文档一次性的装入内存,对文档进行解析根据文档中定义的元素、属性、注释和处理指令等不同的内容进行分解,以结点树的形式在内存中创建XML的表示DOM文档中的每一个结点对应模型中一个对象,然后根据对象提供的编程接口,在Application中访问、操作XML文档使用XML企业应用开发7DOMAPINodeDocumentDocumentFragmentNodeListChracterDataElementDOMExceptionEntityDOMImplementationAttrEntityReferenceDocumentTypeCDATASectionNamedNodeMapTextProcessingInstructionNotation不同结点类型对应接口类型表示文档根结点表示文档类型声明表示文档片段表示可解析的文本内容使用XML企业应用开发8DOMAPI接口下面通过DOM的简单应用,学习DOM的主要核心接口⑴遍历文档⑵添加结点⑶删除结点⑷替换结点使用XML企业应用开发9应用:遍历文档使用XML企业应用开发10代码分析-1DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=factory.newDocumentBuilder();Documentdoc=builder.parse(args[0]);doc.normalize();Elementroot=doc.getDocumentElement();①创建文档对象生成工厂;②实例化文档对象;③解析XML文档;④normalize()方法可以去掉XML文档中作为格式化内容的空白而映射在DOM树中不必要的TextNode对象;⑤获得文档根元素结点Document接口使用XML企业应用开发11代码分析-2获得元素子结点与属性结点子结点的个数处理属性结点递归处理子结点Node结点常量使用XML企业应用开发12代码分析NodeListchildren=element.getChildNodes();NamedNodeMapattr=element.getAttributes();intr=children.getLength();Node接口使用XML企业应用开发13NodeList接口:我们可通过节点列表中的节点索引号来访问列表中的节点(索引号由0开始)。if(attr!=null){System.out.print(+element.getNodeName());for(intj=0;jattr.getLength();j++){System.out.print(+attr.item(j).getNodeName()+=+attr.item(j).getNodeValue()+);}System.out.println();}elseif(attr==null){System.out.println(+element.getNodeName()+);}代码分析NamedNodeMap接口:用于表示可以通过名称访问的节点的集合使用XML企业应用开发14代码分析if(element.hasChildNodes()){for(intk=0;kr;k++){if(children.item(k).getNodeType()==Node.ELEMENT_NODE)printNode((Element)children.item(k));elseif(children.item(k).getNodeType()==Node.TEXT_NODE){System.out.println(children.item(k).getNodeValue());}}System.out.println(/+element.getNodeName()+);}使用XML企业应用开发实验一:使用DOM遍历编写一个Java程序,将students.xml中的所有节点遍历输出。students.xml使用XML企业应用开发参考代码:使用XML企业应用开发17DOM应用:添加结点在元素Teams的子元素Team后添加一个新的Team元素。生成一个新的结点Team使用XML企业应用开发18在根结点下添加新的Team结点该代码作用:利用Transformer将处理的文档信息通过XSLT转换返回给源文档。如果不加该段代码,程序对信息的处理只表现在内存中,无法反映在XML文档上。使用XML企业应用开发19运行结果使用XML企业应用开发20DOM应用:插入结点在现有Team元素之前插入新结点Team新结点Team使用XML企业应用开发21代码分析在原有Team元素前插入一个新的Team结点使用XML企业应用开发22运行结果使用XML企业应用开发23应用:删除结点将上例中第一个Team元素的Member子元素的文本子节点删除使用XML企业应用开发24运行结果使用XML企业应用开发25DOM应用:删除结点将上例中第一个Team结点删除使用XML企业应用开发26运行结果使用XML企业应用开发27DOM应用:替换结点创建一个新的结点Member,替换原先的Member结点创建Member结点结点替换root.getFirstChild().replaceChild(newmember,oldmember);替换使用XML企业应用开发28运行结果使用XML企业应用开发实验二使用DOM操作XML新建java程序,建立如下图的ds.xml文档参考代码:使用XML企业应用开发实验二使用DOM操作XML在上例ds.xml文档中开始部分添加一条学生记录。参考代码:思考(1)如何删除张三学生的信息?(2)如何把李四学生性别改为男?使用XML企业应用开发31DOM特点-1文档对象模型(DocumentObjectModel,DOM):是XML文档的编程接口定义如何在程序中访问和操作XML文档是与平台和语言无关的接口以树结构表示XML文档通过提供一组对象对XML文档结构的访问定义用于访问和操作XML文档的API使用XML企业应用开发32DOM特点-2文档对象模型DOMXML文档的编程接口定义如何在程序中访问和操作XML文档与平台和语言无关的接口使用XML企业应用开发33DOM特点-3编写一个通过DOM访问XML文档的应用程序时需要:XML解析器DOM实现使用DOM创建和操作XML文档有助于避免:未封闭标签错误嵌套标签使用DOM能够在数据库和XML文件之间轻松移动信息使用XML企业应用开发34总结DOM是用于XML文档的与平台和语言无关的编程接口DOM定义如何操作和访问XML文档要通过DOM访问XML文档,需要以下两个组件:XML解析器DOM实现DOM创建的节点树是XML文件的内容的逻辑表示使用XML企业应用开发35思考什么是DOM?简述DOM的结构和工作方式。Node接口的appendChild和insertChild方法有什么不同?