免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1240 | 回复: 0
打印 上一主题 下一主题

XML parser [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-05 02:57 |只看该作者 |倒序浏览
一个 XML Parser(解析器)是一段可以读入一个文档并分析其结构的代码。
                       
      
Parser基础
                       
      
一个 XML Parser(解析器)是一段可以读入一个文档并分析其结构的代码。
                       
      
在本章节,我们将讨论如何使用一个 XML 解析器来读入一个 XML 文档。我们也将讨论不同类型的解析器以及您在何时使用它们。
                       
      




回页首
如何使用一个解析器
                       
      
通常而言,使用一个解析器需要如下步骤:
                       
      
  • 创建一个解析器对象
  • 将您的 XML 文档传递给解析器
  • 处理结果
                           
          
    构建一个 XML 应用显然远远超出这些,但通常一个 XML 的应用将包含这些流程。
                           
          




    回页首
    解析器种类
                           
          
    有不同的方法来划分解析器种类:
                           
          
  • 验证或非验证解析器
  • 支持 Document Object Model (DOM) 的解析器
  • 支持 Simple API for XML (SAX) 的解析器
  • 特定语言编写的解析器 (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 文档来做什么。考虑下面的问题将有助于您找到正确的方法。
                           
          
  • 要用 Java 编写应用程序吗?
             
             
    JAXP 使用 DOM、SAX 和 JDOM;如果您用 Java 编写代码,那么您应使用
    JAXP 将您的代码与各种解析器实现的细节隔离。
            
            
  • 应用程序将如何部署?
             
             
    如果您的应用程序将要作为 Java applet 部署,那么您会希望使要下载的
    代码数量最小,别忘了 SAX 解析器比 DOM 解析器小。还要知道使用 JDOM
    时,除了 SAX 或 DOM 解析器之外还要求编写少量的代码。
            
            
  • 一旦解析了 XML 文档,还需要多次访问那些数据吗?
             
             
    如果您需要回过头来访问 XML 文件的已解析版本,DOM 可能是正确的选择。
    而 SAX 事件被触发时,如果您以后需要它,则由您(开发人员)自己决定以
    某种方式保存它。如果您需要访问不曾保存的事件,则必须再次解析该文件。
    而 DOM 自动保存所有的数据。
            
            
  • 只需要 XML 源文件的少量内容吗?
             
             
    如果您只需要 XML 源文件的少量内容,那么 SAX 可能是正确的选择。SAX
    不会为源文件中的每个东西创建对象;您要确定什么是重要的。使用 SAX,
    您要检查每个事件以了解它是否与您的需要有关,然后相应地处理它。更妙
    的是,一旦找到您正在寻找的东西,您的代码就会抛出一个异常来完全停止
    SAX 解析器。
            
            
  • 您正在一台内存很少的机器上工作吗?
             
             
    若是的话,不管您可能考虑到的其它因素是什么,SAX 是您的最佳选择。
            
            
                           
          
    要知道还存在用于其它语言的 XML API;尤其是 Perl 和 Python 社区有极佳的 XML 工具。
                   
       




    回页首
    参考资料
                           
          
    • 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/。       
              
              

                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16024/showart_226545.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP