Java解析XML方法比较研究.docVIP

  • 4
  • 0
  • 约4.28千字
  • 约 9页
  • 2018-08-11 发布于福建
  • 举报
Java解析XML方法比较研究

Java解析XML方法比较研究   摘要:XML应用日益广泛,正确高效地解析XML文件的数据信息日显重要。Java解析XML的方法有多种,主流方法有DOM、SAX、JDOM、DOM4J。本文分析了这些方法的优劣,给出了最基本的解析XML的示例Java程序。在实际应用中,可以根据各种解析方法的特点选择。   关键词:JAVA;XML;DOM;SAX;JDOM;DOM4J      1 引言      随着Web的广泛应用,XML已成为互联网上主要数据交换标准之一,正确高效地解析XML文件的数据信息日显重要。在Java中主要有四种解析XML的方法:DOM、SAX、JDOM和DOM4J,它们各有特点。通过比较,可以在应用中更加合理地选择它们。      2 DOM解析XML文档      DOM(文档对象模型)是W3C制定的一套标准接口,独立于语言平台的,提供了构成DOM的不同对象的定义,却没有提供特定的实现[1]。实际上,任何编程语言都能够实现,而不仅限于Java。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。其次,它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。   2.1 DOM 设计的局限性   语言独立。DOM 并不是用人们心目中的 Java 语言设计的。虽然这种方法保留了在不同语言中非常相似的API,它也使那些习惯 Java 语言的程序员感到更麻烦。例如:Java 语言内建了一种 String 类,而 DOM 则规范定义了自己的 Text 类。   严格的层次结构。DOM API 直接沿袭了 XML 规范。在 XML 中,每件东西都是一个结点,因此能在 DOM 中找到一个几乎每件东西都可以扩展的基于 Node 的接口和返回 Node 的一系列方法。就多态性的观点来讲,它是优秀的,但鉴于如上解释,它在 Java 语言中的应用是困难而且不便的,其中从 Node 向叶类型作显式下拉会导致代码的冗长和难以理解。   接口驱动。公共 DOM API 仅由接口组成(Exception 类是个例外)。W3C对提供实现并不感兴趣,它只对定义接口感兴趣。但它也意味着作为 Java 程序员使用 API 在创建 XML 对象时增加了分散程度,因为W3C标准大量使用工厂化的类和类似的灵活的但不直接的模式。在某些应用中,XML文档是仅由语法分析器建立的,而从不会由应用程序级代码建立,这是不相关的。但随着 XML 更广泛的使用,并不是所有问题都继续需要由语法分析器来驱动。应用程序的开发人员需要一个更方便的方法有计划地构造 XML 对象。   2.2 DOM解析XML示例   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();   DocumentBuilder builder = factory.newDocumentBuilder();   Document doc = builder.parse(new File(sample.xml));      3 SAX解析XML文档      SAX(XML简单应用程序接口)是一个公共的基于事件的XML文档解析标准[2]。SAX提供了一种对XML文档进行顺序访问的模式,这是一种快速读写XML数据的方式。当使用SAX解析器对XML文档进行解析时,会触发一系列的事件,并激活相应的事件处理函数,从而完成对XML文档的访问,所以SAX接口也被称作事件驱动接口。   与DOM比较而言,SAX是一种轻量型的方法。在处理DOM的时候,需要读入整个XML文档,再在内存中创建DOM树,生成DOM树上的每个Node对象。当文档比较小的时候,这不会造成什么问题,但是一旦文档大起来,处理DOM就会变得相当费时费力。特别是其对于内存的需求,也将是成倍的增长,以至于在某些应用中使用DOM是一件很不划算的事(如在Applet中)。这时候,一个较好的替代解决方法就是SAX。   SAX解析XML示例   SAXParserFactory factory = SAXParserFactory.newInstance();   SAXParser parser = factory.newSAXParser();   XMLReader reader = parser.getXMLRea

文档评论(0)

1亿VIP精品文档

相关文档