解析器的介绍

来源:互联网 发布:java里解压缩gzip文件 编辑:程序博客网 时间:2024/06/11 10:28

XML解析器是读取XML文档并分析其结构的代码。这一部分将介绍XML解析器是如何工作的。将讨论不同类型的XML解析器及何时使用它。

一般而言使用解析器需要以下步骤:

n 创建一个解析器对象

n 使解析器指向您的XML文档

n 处理结果

显然第三步最为复杂。一旦知道了XML文档的内容,比方说,您可能希望生成一个Web页面,创建一个订单或者做一个饼图。这里讨论的常见XML解析工具使这项工作大大简化。

解析器有不同的分类方法:

n 验证和非验证解析器

n 支持一种或多种XML Schema语言的解析器

n 支持Document Object Model (DOM)的解析器

n 支持Simple API for XML (SAX)的解析器

我们已知有三种不同类型的XML文档:

n 结构良好的文档:这类文档符合XML基本规则(属性必须放在引号中,标签必须正确嵌套等)。

n 有效文档:这些结构良好的文档同时还符合文档类型定义(DTD)或XML Schema所定义的规则。

n 无效文档:除以上两种文档外的所有其他文档。

如果您有一个XML文档符合XML的基本规则,那么它就是一个结构良好的文档。如果该文档还满足您的公司所定义的支出帐目文档规则,那么它也是有效的。如果XML解析器发现XML文档不是结构良好的,XML Specification要求解析器报告一个致命错误。

验证解析器:在解析时验证XML文档,而非验证解析器:不验证文档。换句话说,如果一个XML文档是结构良好的,那么非验证解析器并不关心文档是否符合DTD或模式中定义的规则,甚至不关心该文档是否符合DTD或模式中定义的规则,甚至不关心该文档是否有这样的规则。(多数验证解析器都默认关闭验证功能。)

那么为什么要使用非验证解析器呢?有两个很好的理由:速度和效率。XML解析器读取DTD或者模式,建立规则引擎保证XML文档中的每个元素和属性都遵循这些规则,需要做大量的工作。如果您确信一个XML文档是有效的,那么就可以完全跳过验证。根据文档规则复杂程度的不同,这样可以节约相当可观的时间和内存。如果您的代码不够健壮,它从XML文档中得到输入数据,并且该代码要求文档遵循特定的DTD或者模式,那么您可能就不得不验证所有的内容,不论代价多么高,多么浪费时间。

DOM是W3C推荐的正式标准。它定义了一个接口,程序能够访问和更新XML文档的结构。如果一个XML解析器声称支持DOM,就意味着它实现了该标准中定义的接口。目前,有三个级别的DOM是正式的推荐标准,被命名为DOM Level 1,DOM Level 2 和DOM Level 3。本章中所讨论的DOM功能都是DOM Level 2的一部分。

DOM解析器:当你使用DOM解析器解析一个XML文档时,您得到一棵结构树,它表示XML文档的内容。所有的文本,元素和属性,都在这个树结构中 

解析的过程:


解析后的XML文档。


DOM还提供各种不同的功能,可用于分析和操作树的内容和结构。DOM是处理XML数据的传统方法。使用DOM时,数据以树状结构的形式被加载到内存中,所以,DOM解析是一个比较耗费内存的操作。如上图所示,矩形框表示元素节点,椭圆表示文本节点。DOM使用父子关系。例如,在这个例子中,student是具有五个孩子的根元素:三个文本节点(空白),以及两个元素节点name和age。要认识到的一件重要事情是,name 和 age节点实际上具有null值。相反,它们具有文本节点(goudan 和 28)作为孩子。

原文:http://www.5itjob.com/java-peixun/607.html


原创粉丝点击