您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 电气安装工程 > XML教程第5章 DOM
第五章DOM课程目标DOM简介。DOM的接口和类。DOM的用法。JDOM的用法。体验项目——使用DOM解析并更新XML文档使用DOM解析关于学生信息的XML文档,然后使用DOM的接口向该文档中添加关于教师的信息。最后再用改动后的XML文档替换该文档。程序运行前,学生信息的XML文档(class.xml)内容,如下图所示:运行前文档的内容图程序运行后,学生信息的XML文档内容如下图所示:运行后文档的内容图DOM简介了解DOMDOM是DocumentObjectModel的缩写,即文档对象模型。W3C已于2000年11月13日推出了DOMlevel2规范。DOM是HTML和XML文档的编程接口规范,它与平台和语言是无关的,因而可以用各种语言和在各种平台上实现。该模型定义了HTML和XML文件在内存中文档结构,提供了对HTML和XML文件的访问、存取方法。利用DOM规范,可以实现DOM文档和XML之间的相互转换,对相应DOM文档的内容进行遍历或其他操作。如果要自由的操纵XML文件,就要用到DOM规范。DOM的原理简单的说,就是通过解析XML文档,为XML文档在逻辑上建立一个树模型,树的节点是一个个对象。我们通过存取这些对象就能够操作XML文档中的内容了。DOM的优缺点DOM的优势主要表现在:易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath,增强了易用性。DOM的缺点主要表现在:效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。另外效率低还表现在大量的消耗时间,因为使用DOM进行解析时,将为文档的每个element、attribute、processing-instrUCtion和comment都创建一个对象,这样在DOM机制中所运用的大量对象的创建和销毁无疑会影响其效率。文档模型ElectricXML(EXML)JDOMdom4jXMLPullParser(XPP)JDOM的目的是成为Java特定文档模型,JDOM仅使用具体类而不使用接口,并大量使用了集合类是JDOM的一种智能分支,包括集成的XPath支持、Schema支持以及用于大文档或流化文档的基于事件的处理是支持分布式计算的商业项目的附属产物,只能适当地支持XML文档的子集,它没有为验证提供任何支持并且有更严格的许可证XPP只能适当支持XML文档的子集,并且不支持对文档提供验证Java中的可用文档模型数一直在增加。除了DOM外,还有以下几种:DOM类的介绍DocumentBuilderFactory类DocumentBuilderFactory类是一个抽象类,该类主要用于定义工厂API,使应用程序能够从XML文档获取生成DOM对象树的解析器。该类位于javax.xml.parsers包中,只有一个受保护的构造方法。其构造方法如下:protectedDocumentBuilderFactory()方法:用于阻止实例化的受保护构造方法。该类还包括以下几种常用的方法:staticDocumentBuilderFactorynewInstance()获取DocumentBuilderFactory的新实例staticDocumentBuilderFactorynewInstance(StringfactoryClassName,ClassLoaderclassLoader)voidsetValidating(booleanvalidating)指定是否由此代码生成的解析器来验证被解析的文档。abstractDocumentBuildernewDocumentBuilder()voidsetIgnoringComments(booleanignoreComments)指定由此代码生成的解析器是否忽略注释voidsetExpandEntityReferences(booleanexpandEntityRef):指定由此代码生成的解析器是否扩展实体引用节点。DocumentBuilder类DocumentBuilder类是一个抽象类,主要用于从XML文档获取DOM文档实例。可以通过DocumentBuilderFactory.newDocumentBuilder();代码获取此类的实例。获取此类的实例之后,将可以从各种输入流来解析XML。protectedDocumentBuilder()。DocumentBuilder类其他的常用方法如下:(1)Documentparse(Stringuri)方法:将给定URI的内容解析为一个XML文档,并且返回一个新的DOMDocument对象。(3)voidreset()方法:将此DocumentBuilder重置为其原始配置。(2)abstractDocumentnewDocument()方法:获取DOMDocument对象的一个新实例来生成一个DOM树。(5)abstractvoidsetErrorHandler(ErrorHandlereh)方法:指定解析器要使用的ErrorHandler。该类有一个受保护的构造方法如下:(4)abstractvoidsetEntityResolver(EntityResolverer)方法:指定使用EntityResolver解析要解析的XML文档中存在的实体。DOM的四个基本接口介绍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对象。NodeList接口NodeList接口提供对节点的有序集合的抽象,没有定义或约束如何实现此集合。该接口位于org.w3c.dom包中,NodeList对象是不断变化的。intgetLength()方法:列表中的节点数。Nodeitem(intindex)方法:返回集合中的索引为index的节点。如果index大于或等于此列表中的节点数,则返回null。主要方法有以下两个:Node接口Node接口是其他大多数接口的父类,像Document、Element、Attribute、Text、Comment等接口都是从Node接口继承过来的。它表示该文档树中的单个节点。常用的方法有以下几种:NodeappendChild(NodenewChild)方法:将节点newChild添加到此节点的子节点列表的末尾。NamedNodeMapgetAttributes()方法:返回包含此节点的属性的NamedNodeMap对象;否则为null。NodegetFirstChild()方法:此节点的第一个子节点。NodegetLastChild()方法:此节点的最后一个节点。NodegetNextSibling()方法:直接在此节点之后的节点。StringgetNodeValue()方法:此节点的值,取决于其类型;NodegetParentNode()方法:此节点的父节点。NoderemoveChild(NodeoldChild)方法:从子节点列表中移除oldChild所指示的子节点,并将其返回。注意:在DOM中每个元素的字符数据(元素值)也是一个Node对象。NodeList和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元素的信息test.xml文件的内容如下:classstudentnamezhangsan/nameage20/ageaddresschina/address/studentstudentnamelisi/nameage25/ageaddresschina/address/student/class运行效果图NamedNodeMap接口实现NamedNodeMap接口的对象用于表示可以通过名称访问的节点的集合。NamedNodeMap表示的是一组节点和其唯一名称的一一对应关系,这个接口主要用在属性节点的表示上。在实现NamedNodeMap的对象中所包含的Node对象还可以通过顺序索引进行访问,但并不意味着DOM指定这些节点的顺序。在DOM中NamedNodeMap对象也是不断变化的。NamedNodeMap接口主要方法NamedNodeMap接口主要有以下几种方法:intgetLength()方法:返回该NamedNodeMap对象中的节点数。NodegetNamedItem(Stringname)方法:返回名称为name的节点。NodegetNamedItemNS(StringnamespaceURI,StringlocalName)方法:返回通过本地名称和名称空间URI所指定的节点。NoderemoveNamedItemNS(StringnamespaceURI,StringlocalName)方法:移除通过本地名称和名称空间URI所指定的节点。Nodeitem(intindex)方法:返回索引值为in
本文标题:XML教程第5章 DOM
链接地址:https://www.777doc.com/doc-3528501 .html