Web服务发布技术研究+文献综述(3)
时间:2018-04-25 20:31 来源:毕业论文 作者:毕业论文 点击:次
a) 使用DOM解析XML文档 Document中提供如下用来访问XML文档中的节点的方法: Element getDocumentElement():其是用来获取XML文档的根节点; Element getElementByld(String tagname):其是用来根据XML元素的ID来获取XML元素。 NodeList getElementByTagName(String tagname):其是用来根据XMl标签名获取XML元素。 使用DOM创建XML文档可以先在内存中创建新的DOM树,并未DOM树添加节点,然后将DOM树转换成XML文档即可。Document也提供了很多常用方法来创建节点,如Attr createAttribute(String name),这里就不一一列举。 b) 使用DOM修改XML文档 使用DOM可以修改XML文档,这个操作就比较简单了,首先使用DOM解析器解析已有的XML文档,利用DOM树节点之间的结构关系找到待修改的节点,然后调用各节点对象的方法修改该节点所包含的数据,最后使用LSSerializer再次序列化修改后的DOM树即可完成XML文档的修改。 2.1.2 基于SAX解析 SAX采用事件机制方式来解析XML文档,一种快速读写XML数据的方式。SAX解析器解析XML文档时,会触发一系列事件,这些事件被监听器监听后会触发相应的处理方法,从而实现对XML文档的访问,如图4.2所示。 2.2 SAX解析图解 在SAX解析器着手解析时就开始发送事件,当SAX解析器着手处理文档开始、元素开始和文本时,就会在文档中触发一个事件,那么监听器就开始负责处理这些事件,事件中包含XML元素的内容,即元素值和属性,从而实现对XML文档信息的读取。 a) 使用DOM解析XML文档 SAX解析器不创建任何对象,它只在遇到XML文档的各种标签时触发相对应的事件,而且将XML文档的元素内容封装成事件传出去。使用XMLReader和XMLReaderFactory这组API来解析XML文档的话,可以先通过调用XMLReaderFactory的createXMLReader()方法来建立一个XMLReader对象,如果希望启动SAX解析器的原生特性,可多次调用XMLReader对象的setFeature()方法。然后分别调用XMLReader的setContentHandler、setDTDHandler、setEntityResolver和setErrorHandler方法来绑定多个事件监听函数。最后调用XMLReader的parse()方法来解析XML文档。 使用XML解析器解析XML文档时,同样可以使用DTD来验证XML文档的有效性。通过以上的介绍,使用SAX解析XML文档也很容易实现。使用SAXParser和SAXParserFactory这组API来解析XML文档的话,可以先通过SAXParserFactory的newInstance()方法创建SAX解析器工厂对象,再调用SAXParserFactory对象的newSAXParser()方法创建SAXparser对象,最后调用SAXParser对象的parser()方法解析XML文档即可,不过调用该方法时需要传入一个DefaultHandler对象。 2.1.3 基于JDOM解析 JDOM也是Java中常用的解析XML文档的方法,他整合了DOM解析的简单易行和SAX解析的性能优越两大特点。 使用JDOM解析XML文档,首先其将XML文档转换成一个Document对象,相当于XML文档的根节点,获得该节点所用到的类为SAXBuilder,然后可以利用已得到的Document节点的getRootElement()方法,得到根元素,其提供了getChildren()方法可以获得子节点。但是不能使用getRootElement()方法获得属性。所以要获得属性,要使用的方法是getAttribute(String attributeName),可以通过getAttributeValue(String attributeName)获得该属性的值。使用JDOM也可以创建XML文档,删除并修改节点。 a) 解析XML文档 这点和DOM不同。Dom则需要更为复杂的代码,如下: JDOM不允许同一个节点被两个或多个文档同时相关联,如果要在第二个文档中使用原来老文档中的节点的话,那么首先需要使用detach()把这个节点给分开来。 (责任编辑:qin) |