`
躁动的绵羊
  • 浏览: 95904 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XML教程——XML解析器

阅读更多

Parser基础

一个 XML Parser(解析器)是一段可以读入一个文档并分析其结构的代码。

在本章节,我们将讨论如何使用一个 XML 解析器来读入一个 XML 文档。我们也将讨论不同类型的解析器以及您在何时使用它们。


如何使用一个解析器

通常而言,使用一个解析器需要如下步骤:

  1. 创建一个解析器对象
  2. 将您的 XML 文档传递给解析器
  3. 处理结果

构建一个 XML 应用显然远远超出这些,但通常一个 XML 的应用将包含这些流程。


解析器种类

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

  1. 验证或非验证解析器
  2. 支持 Document Object Model (DOM) 的解析器
  3. 支持 Simple API for XML (SAX) 的解析器
  4. 特定语言编写的解析器 (Java, C++, Perl 等)

接下来我们将讨论这几种解析器的各自特点.


验证或非验证解析器

如我们在前面所提及的,XML 文档如果使用一个 DTD 并符合 DTD 中的规则将被称为有效文档(valid document)。符合基本标记规则的 XML 文档被称为格式正确文档(well-formed document)。

XML 规范要求所有的解析器当其发现一个文档不是格式正确时要报错。

验证(Validation)则是另一个问题了。验证解析器(Validating parser)在解析 XML 文档同时进行验证。非验证解析器(Non-validating parser) 忽略所有的验证错误。

换而言之,如果一个 XML 文档是格式正确的时,一个非验证解析器并不关注文档是否符合其对应 DTD 所指定的规则(如果有的话)。


为何使用非验证解析器?

速度和效率。要一个 XML 解析器处理 DTD 并确保每个 XML 的元素符合在 DTD 中的规则需要相当大的开销。如果您确定一个 XML 文档是有效的(可能来自一个数据源),那就没有必要再次验证它了。

同样,有时您所需要的只是从一个文档中找出 XML 的标记。一旦您有了这些标记,您可以将数据从中提取出然后加以处理。如果这就是您所需要的,一个非验证解析器就是正确的选择。


Document Object Model (DOM)

文档对象模型(Document Object Model)是 World Wide Web Consortium(W3C) 的正式推荐。它定义了一个接口使得程序可以存取和更新 XML 文档的风格、结构和内容。支持 DOM 的 XML 解析器实现该接口。

该规范的第一版,DOM Level 1,可从 http://www.w3.org/TR/REC-DOM-Level-1 获得。

当您用一个 DOM 解析器来解析一个 XML 文档时,您将获得一个包含文档中所有元素的树结构。DOM 提供了不同的功能来检查文档的内容和结构。


Simple API for XML (SAX)

SAX API 是另一种处理 XML 文档内容的方法。一个既成事实的标准,它由 David Megginson 和 XML-Dev 邮件列表其它成员所开发。

要查看完整的 SAX 标准,参见 www.megginson.com/SAX/。要参加 XML-Dev 邮件列表,发送邮件到 majordomo@ic.ac.uk 其中包含: subscribe xml-dev。

当您使用 SAX 解析器来解析 XML 文档时,解析器在文档的不同处将产生事件。由您来决定对每个事件如何处理。

SAX 解析器会在以下情况下产生事件:在文档开始和结束时,在一个元素开始和结束时,或者它在一个元素中找到字符时,以及其它若干点。您可编写 Java 代码来处理每个事件,以及如何处理从解析器获得的信息。


何时使用 SAX?何时使用 DOM?

为了确定哪种接口适合您,您需要理解所有接口的设计要点,而且需要理解应用程序用您将要处理的 XML 文档来做什么。考虑下面的问题将有助于您找到正确的方法。

  1. 要用 Java 编写应用程序吗?
    JAXP 使用 DOM、SAX 和 JDOM;如果您用 Java 编写代码,那么您应使用 JAXP 将您的代码与各种解析器实现的细节隔离。
  2. 应用程序将如何部署?
    如果您的应用程序将要作为 Java applet 部署,那么您会希望使要下载的代码数量最小,别忘了 SAX 解析器比 DOM 解析器小。还要知道使用 JDOM 时,除了 SAX 或 DOM 解析器之外还要求编写少量的代码。
  3. 一旦解析了 XML 文档,还需要多次访问那些数据吗?
    如果您需要回过头来访问 XML 文件的已解析版本,DOM 可能是正确的选择。而 SAX 事件被触发时,如果您以后需要它,则由您(开发人员)自己决定以某种方式保存它。如果您需要访问不曾保存的事件,则必须再次解析该文件。而 DOM 自动保存所有的数据。
  4. 只需要 XML 源文件的少量内容吗?
    如果您只需要 XML 源文件的少量内容,那么 SAX 可能是正确的选择。SAX 不会为源文件中的每个东西创建对象;您要确定什么是重要的。使用 SAX,您要检查每个事件以了解它是否与您的需要有关,然后相应地处理它。更妙的是,一旦找到您正在寻找的东西,您的代码就会抛出一个异常来完全停止 SAX 解析器。
  5. 您正在一台内存很少的机器上工作吗?
    若是的话,不管您可能考虑到的其它因素是什么,SAX 是您的最佳选择。

要知道还存在用于其它语言的 XML API;尤其是 Perl 和 Python 社区有极佳的 XML 工具。

<!-- CMA ID: 162354 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file: dw-article-6.0-beta.xsl -->

 

参考资料

  • Java

    IBM 的解析器,XML4J,可从 www.alphaWorks.ibm.com/tech/xml4j 获得。
    James Clark 的解析器,XP,可从 www.jclark.com/xml/xp 获得。
    Sun 的 XML 解析器可从 developer.java.sun.com/products/xml/ (您必需成为 Java Developer Connection 的会员)下载。
    DataChannel 的 XJParser 可从 xdev.datachannel.com/downloads/xjparser/ 获得。

  • C++

    IBM 的 XML4C 解析器可从 www.alphaWorks.ibm.com/tech/xml4c 获得。
    James Clark 的 C++ 解析器,expat,可从 www.jclark.com/xml/expat.html 获得。

  • Perl

    有多种 Perl 语言的 XML 解析器。要获得更多信息,参见 www.perlxml.com/faq/perl-xml-faq.html。

  • Python

    要获得更多 Python 语言的 XML 解析器,参见 www.python.org/topics/xml/。

分享到:
评论

相关推荐

    XML解析器————

    XML解析器是处理XML文档的核心工具,它读取XML文档并将其转换为程序可以理解的形式。Xerces-J是Apache软件基金会开发的一个高性能、全功能的XML解析器,专门针对Java平台设计。 Xerces-J-bin.2.9.1是Xerces-J的一个...

    Android XML解析——Sax解析XML

    XML解析是将XML文档转换为应用程序可以处理的数据的过程。本篇文章将重点讨论Android中的SAX(Simple API for XML)解析器,这是一种事件驱动的解析方法,适合处理大文件或内存有限的设备。 ### SAX解析原理 SAX...

    xml——————表单资源

    在处理XML时,我们通常会用到XML解析器,它们分为DOM(Document Object Model)解析器、SAX(Simple API for XML)解析器和StAX(Streaming API for XML)解析器。DOM解析器将整个XML文档加载到内存中,形成一个树形...

    Android XML解析—— Pull解析XML(待完善)

    XML解析是将XML文档转换为程序可以理解的结构化数据的过程。本文主要关注Android中的Pull解析方式来处理XML,这是一种轻量级、低内存占用的解析方法。 **什么是XML Pull解析** XML Pull解析器(XML Pull Parser)...

    Android之PULL解析XML文件——新浪微博客户端首页效果

    在本主题"Android之PULL解析XML文件——新浪微博客户端首页效果"中,我们将深入探讨如何利用PULL解析器(PullParser)来处理XML数据,从而实现类似新浪微博客户端首页的动态效果。这种效果通常包括新闻标题、摘要、...

    java解析xml——dom

    ### Java解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...

    android开发之xml文件操作——xml创建和pull解析xml

    XML解析则分为DOM、SAX和Pull三种主要方式。DOM解析器将整个XML文档加载到内存中,形成一个树形结构,便于访问任意节点,但内存消耗大;SAX解析器采用事件驱动模型,逐行读取,适合处理大型XML文件,但编程相对复杂...

    XML函数——expat

    Expat 是一个用C语言编写的XML解析器,它的设计思想是基于流式解析和事件驱动,这使得它能够高效地处理大型XML文件,而无需一次性将整个文件加载到内存中。这种特性对于处理大容量数据或者在资源有限的环境中(如...

    XML——sax解析 极速入门易懂示例

    SAX解析的基本工作原理是:当解析器读取XML文件时,遇到文档的各个部分(如元素开始、元素结束、文本内容等)会触发相应的事件,开发者通过实现SAX解析器的回调接口来处理这些事件。这种方式非常适合处理大文件,...

    XML格式脚本文件解析器源代码

    本篇文章将深入探讨XML解析器的基本概念、XML的结构以及VC++环境下实现XML解析器的相关技术。 XML的基本结构: XML文档由元素(Element)、属性(Attribute)、文本内容(Text Content)等构成。元素是XML文档的...

    IOS应用源码——XML解析.zip

    这个“IOS应用源码——XML解析.zip”文件包含了一个iOS应用程序的源代码,专注于XML数据的解析。理解XML解析在iOS应用开发中的作用以及如何在Objective-C或Swift中实现这一功能,对于提升iOS开发技能至关重要。 ...

    安卓Android源码——比较通用的xml解析方法.rar

    本资料包“安卓Android源码——比较通用的xml解析方法”将深入探讨在Android平台上解析XML的多种方法。 1. DOM解析器(Document Object Model) DOM解析器将整个XML文档加载到内存中,创建一个树形结构,便于遍历和...

    在Delphi中使用SQL Server的XML特性 二——查询技术.pdf

    我们可以使用 Microsoft XML 解析器来解析 SQL Server 查询产生的 XML 文档,然后将其转换为 Delphi 可以识别的数据格式。 Delphi 中使用 Microsoft XML 解析器的步骤: 1. 创建一个新的类型库接口单元 2. 选择 ...

    XML网页设计实用教程——例题源码.rar

    第五章至第八章可能涵盖JSP与XML的结合,包括DOM和SAX解析器的使用,以及如何在JSP中处理XML数据;第九章和实验指导则可能涉及AJAX的应用,包括XMLHttpRequest对象的使用和简单的AJAX请求示例。 通过这个压缩包,...

    IOS应用源码——XML解析.rar

    此压缩包"IOS应用源码——XML解析.rar"包含的源码示例,很可能是用于演示如何在iOS应用中解析XML数据。在本文中,我们将深入探讨iOS中的XML解析技术,并通过相关知识点的详细讲解,帮助你理解和掌握这一技能。 首先...

    《无废话XML》——两只老虎

    - **编程语言集成**:多数现代编程语言都提供了支持XML处理的库或框架,如Java中的DOM和SAX解析器。 ##### 1.3.7 XML与安全性 - **安全性问题**:在处理XML时需要注意安全风险,比如外部实体注入攻击等。 ### 二...

    使用Android自带的XML解析器PULL解析器简单的解析xml

    Android系统提供了一种轻量级的XML解析方式——PULL解析器(Pull Parser),它适用于处理大型XML文档,因为它不需要像DOM解析器那样一次性加载整个XML文档到内存中。PULL解析器通过事件驱动的方式,按需解析XML文档...

    纯C语言XML解析xmlparse.c&xmlparse;.h

    本文将深入探讨基于C语言的XML解析器——xmlparse.c和xmlparse.h,以及它们在银行国税库行横向联网接口系统中的应用。 xmlparse.c和xmlparse.h是构成这个小型、精悍且高效的XML解析器的核心部分。C语言的特性使得该...

    实战XML教程(第二版),对xml的知识做了深入细致的讲解。

    1. 解析器:XML解析器读取XML文档并生成解析树,分为DOM(文档对象模型)和SAX(简单API for XML)两种方式。DOM一次性加载整个文档,适合小规模数据;SAX逐事件处理,适合大文件。 2. XSLT:XML样式表转换语言,...

Global site tag (gtag.js) - Google Analytics