DRP项目(七)----XML应用和XML的四种解析器(dom,sax,jdom和dom4j)原理及实例

时间:2023-02-26 20:19:58
 

一、XML概念:

        XML:可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

        XML现在已经成为一种通用的数据库交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations),具体可参阅w3c官方网站文档http://www.w3.org获取更多信息。

二、XML(轻量级的数据储存文件)优点:

1)XML文档的内容和结构完全分离

        这个特性为XML的应用带来了很大的好处。基于这样的特点,企业系统可以轻松地实现内容管理和流程管理的彻底分离,例如系统架构师可以只关注流程运转中各环节的接口定义,而各部门则可以专注在内容发布和维护之上。

       举例来说,微软公司的产品Biztalk正是利用了XML内容和结构分离的特点来实现内容和流程定义的分离。另外一个广泛的应用是XSL技术,由于XML文件的内容和结构分离,XSL才可以在不影响内容的情况下改变XML文件结构。

2)互操作性强

       大多数纯文本的文件格式都具有这个优点。纯文本文件可以方便地穿越防火墙,在不同操作系统上的不同系统之间通信。而作为纯文本文件格式,XML同样具有这个优点。

3)规范统一

       XML具有统一的标准语法,任何系统和产品所支持的XML文档,都具有统一的格式和语法。这样就使得XML具有了跨平台跨系统的特性。作为对比,同样作为文本语言,JavaScript的标准就远没有XML这样统一,以至于经常出现同一静态页面在不同的浏览器中产生不同的结果,而脚本程序员往往需要在程序的入口处费力地判断客户端所支持的脚本版本。

4)支持多种编码

       相对于普通文本文档而言,XML文档本身包含了所使用编码的记录,这方便了多语言系统对数据的处理。

5)可扩展性

       XML是一种可扩展的语言,可以根据XML的基本语法来进一步限定使用范围和文档格式,从而定义一种新的语言。例如:MathML(数学标记语言)、CML(化学标记语言)和TecML(技术数据标记语言),每种语言都用于其特定的环境。

三、理解定义

 

       plan的类型是org.w3c.dom.Element,在jdk的文档里是这样描述的:Element 接口表示 HTML 或 XML 文档中的一个元素。实际上plan的类型也可以用org.w3c.dom.Node代替,在jdk里它是这样描述的:该 Node接口是整个文档对象模型的主要数据类型。它表示该文档树中的单个节点。Element继承自Node。

       doc的声明是这样:Dcument doc = builder.parse(new FileInputStream("./src/data/pla.xml"));其类型org.w3c.dom.Document在jdk文档中是这样描述的:Document 接口表示整个 HTML 或 XML 文档。

       builder的声明是这样:DocumentBuilder builder = fac.newDocumentBuilder();其类型javax.xml.parsers.DocumentBuilder在jdk文档是这样描述的:定义 API, 使其从 XML 文档获取 DOM 文档实例。

       fac的声明是这样:DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();其类型javax.xml.parsers.DocumentBuilderFactory在jdk文档里是这样描述的:定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。

四、解析四种实例

DOM生成和解析XML文档

       原理:DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。

      DOM实例读取XML

SAX生成和解析XML文档

       原理:   SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。

       SAX实例读取XML

DOM4J生成和解析XML文档 

       原理:虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。

  为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。

         DOM4J实例读取XML

JDOM生成和解析XML  

        原理: JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。

  JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

         JDOM实例读取XML