`
躁动的绵羊
  • 浏览: 94441 次
  • 性别: 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解析器Xerces-J-bin.2.9.1

    XML函数——expat

    expat 是使用C所写的XML解释器,采用流的方式来解析XML文件,并且基于事件通知型来调用分析到的数据,并不需要把所有XML文件全部加载到内存里,这样可 以分析非常大的XML文件。由于expat库是由XML的主要负责人James ...

    Effective XML——有效使用XML的50种方法

    这本书讲解了50种有效使用XML的方法,可为你解答下面的问题: ...2、在解析器的报告中哪些是可靠的 3、主题语言是否真的合适你的工作 4、选择哪个API可以得到最高的效率和最小规模的代码 ~~~~~~~~~~~~~~~~

    TinyXML——类库+doc

    个人感觉tinyxml还是一个不错的xml解析器,用起来也比较方便。

    xpp3 xml解析器

    XPP —— XML Pull Parser,XPP3是一个非常快的XML解析器,是第三版的XPP

    C#XML入门经典 C#编程人员必备的XML技能.part2

    XML概述 &lt;br&gt;2.1 XML的概念 2.1.1 XML元素 2.1.2 XML属性 2.1.3 XML解析器 2.1.4 构建XML 2.1.5 XML文档的各个组成部分 2.2 创建格式良好的XML文档 2.2.1 XML中的元素 2.2.2 XML中的属性...

    Tinyxml 源代码(VC6 & VS2005)

    TinyXML是一个简单小巧,可以很容易集成到其它程序中的C++ XML解析器。 它能做些什么 简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言...

    Xerces-J-tools.2.11.0-xml-schema-1.1-beta.zip下载

    Xerces-J-tools.2.11.0-xml-schema-1.1-beta.zip为apache开源xml相关,可用于xml解析 Xerces是由Apache组织所推动的一项XML文档解析开源项目,它目前有多种语言版本包括JAVA、C++、PERL、COM等。[1] Xerces是一个...

    Android 创建与解析XML(四)——详解Pull方式

    Android系统中和创建XML相关的包为org.xmlpull.v1,在这个包中不仅提供了用于创建XML的 XmlSerializer,还提供了用来解析XML的Pull方式解析器 XmlPullParser XmlSerializer没有像XmlPullParser那样提取XML事件,而是...

    Android与Internet接轨案例源代码

    8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的应用 8.15 手机下载看3gp影片——Runnable混搭SurfaceView 8.16 访问网站LoginAPI——远程服务器验证程序运行权限 8.17...

    Android创建与解析XML(二)——详解Dom方式

    Dom方式创建XML,应用了标准xml构造器 javax.xml.parsers.DocumentBuilder 来创建 XML 文档,需要导入以下内容 javax.xml.parsers javax.xml.parsers.DocumentBuilder javax.xml.parsers.DocumentBuilderFactory ...

    Android程序技术:个人学习助手项目习题详情显示.pptx

    Android 程序技术 本节课程内容:习题详情显示 XML概述 XML概述 Summary of XML ...Android中已经集成了PULL解析器。 PULL解析 XML解析 XML parsing XmlPullParser.START_DOCUMENT:XML文档的开始,如&lt;?xml

    使用python解析xml成对应的html示例分享

    /usr/bin/env python # -*- coding: utf-8 -*-#—————————————# 程序:XML解析器# 版本:01.0# 作者:mupeng# 日期:2013-12-18# 语言:Python 2.7# 功能:将xml解析成对应的html# 注解:该程序...

    xerces-c++-3.1.3

    XML4C 和 XML4J 是两个并列的项目,而 XML4J 是 Xerces-J——Java 实现——的前身。IBM 将这两个项目的源代码让与 Apache 软件基金会(Apache Software Foundation),他们将其分别改名为 Xerces-C++ 和 Xerces-J。注...

    Android创建与解析XML(三)——详解Sax方式

    SAX是一种占用内存少且解析速度快的解析器,它采用的是事件启动,不需要解析完整个文档,而是按照内容顺序看文档某个部分是否符合xml语法,如果符合就触发相应的事件,所谓的事件就是些回调方法(callback),这些...

    Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】

    我们知道,Python拥有出色的内置HTML解析器模块——HTMLParser,然而还有一个功能更为强大的HTML或XML解析工具——BeautifulSoup(美味的汤),它是一个第三方库。简单来说,BeautifulSoup最主要的功能是从网页抓取...

    Springboot整合SSM框架的实战项目——own_demo源码解析

    - Java源文件:11个,包含了核心业务逻辑和控制器代码。 - Markdown文档:2个,提供了项目说明和配置信息。 - .gitignore:1个,定义了Git版本控制忽略的文件格式。 - JAR文件:1个,项目的打包部署文件。 - ...

    O r a c l e与X M L

    第2章介绍了Oracle的XML开发包(XML Developer's Kit,XDK)组件,回顾了Java/C/C++/ PLSQL等语言的XML解析器及XSLT处理程序、Java/C++语言的类生成器、以及Java TransViewer组件。用于访问及处理XML/XSL文件的可工作...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的应用 8.15 手机下载看3gp影片——Runnable混搭SurfaceView 8.16 访问网站LoginAPI——远程服务器验证程序运行权限 8.17...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的应用 8.15 手机下载看3gp影片——Runnable混搭SurfaceView 8.16 访问网站LoginAPI——远程服务器验证程序运行权限 8.17...

Global site tag (gtag.js) - Google Analytics