查看“SAX”的源代码
←
SAX
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于这些用户组的用户使用:
管理员
、
行政员
、users
您可以查看与复制此页面的源代码。
== 基本简介 == [[File:01300000165488122546509698047.gif|thumb|sax]][[File:01300000165488122546511773842.jpg|thumb|sax]]SAX最初是由DavidMegginson采用[[Java]]语言开发的,之后SAX很快在Java开发者中流行起来。[[SAN]]项目现在负责管理其原始API的开发工作,这是一种公开的、开放源代码软件。不同于其他大多数XML标准的是,SAX没有语言开发商必须遵守的标准SAX参考版本。因此,SAX的不同实现可能采用区别很大的[[接口]]。不过,所有的这些实现至少有一个特性是完全一样的,这就是事件驱动。 相当多的SAX实现都可以从网上获得。不幸的是,它们之间稍有不同,但其大多数都提供了相应的帮助文档。以下是一些流行的SAX实现:最“标准”的Java版本在SAX项目[[网站]]。 MicrosoftXMLCoreServices4.0库包括了采用COM的SAX[[解析器]],对[[VB]]程序员特别有用(或开发Windows的程序员)。 支持Perl的bindingofSAX2.0。 SAXinC++是一套用在SAX和C++应用程序中的[[C++]]接口和封装类。许多编程语言,比如Python和所有的[[.NET]]语言都在其核心功能中内建支持SAX。 == 文档解析 == [[File:01300000165488122546513120450.jpg|thumb|sax]]在SAX解析器装载XML文件时,它遍历文件文档并在其主机应用程序中产生事件(经由[[回调函数]]、[[指派函数]]或者任何可调用平台完成这一功能)表示这一过程。这样,编写SAX应用程序就如同采用最现代的工具箱编写[[GUI]]程序。 大多数SAX实现都会产生以下若干类型的事件: 在文档的开始和结束时触发文档处理事件。在文档内每一XML元素接受解析的前后触发[[元素]]事件。任何元数据通常都由单独的事件交付。在处理文档的DTD或Schema时产生[[DTD]]或Schema事件。错误事件用来通知主机应用程序解析错误。 显而易见,在处理文档时你最关心的就是元素事件了。通常,SAX解析器会向你的主机应用程序提供包含元素信息的事件参数;在最低程度下也会提供元素的名字。具体取决于你的特定实现,可以定义不同类型的元素事件代表不同类型元素的处理。例如,注释元素(它可能包含主机[[应用程序]]的处理指令)就经常在接受处理时产生特殊的事件。 == 事件通知 == 假如把程序清单A中的XML文件装入了SAX解析器,那么你可能会在你的[[主机]]应用程序中收到以下事件通知: [[File:01300000165488122546515366906.jpg|thumb|sax]]DocumentStartElementStart“catalog”ElementStart“book”ElementStart“author”Data“Adams,Lamont”ElementEnd“author”ElementStart“title”Data“Lamont'sFirstBook”ElementEnd“title”ElementEnd“book”ElementEnd“catalog”DocumentEnd SAX对DOM,在什么情况下采用这种或者那种[[API]]并没有确定的严格规则;具体情况具体分析。所有的SAX处理都在一次遍历中完成的;因此,在解析同等大小的文档时SAX通常会相比DOM提供更好的[[性能]](因为DOM必须[[遍历树]]结构)。此外,与DOM是比,因为在给定的时间之内只需要XML文档的一部分装入内存,所以SAX通常在处理更大文件时内存的利用效率也来得更高(DOM在开始解析文档之前必须把全部XML文档装入内存)。 SAX也不是没有缺点。SAX应用程序一般都比较长,程序中充斥着大量的if/else结构用来确定处理特定[[元素]]时所采用的运动。同样的,处理多个XML元素之间散布的数据结构也很成问题,因为解析事件之间必须保存中间数据。最后,SAX应用程序的[[事件]]处理结构一般意味着SAX应用程序是针对特定文件结构定制构建的,而DOM应用程序则更具一般性。 == 解析实例 == [[File:01300000165488122546516805886.jpg|thumb|sax]]在Java中使用XML是一个内容相当丰富的主题;可以使用多个API,而且许多API使得使用XML简单得如同从文本文档读取行。基于树的API(如DOM)展现了一个内存中的XML结构,该结构对于GUI和[[编辑器]]来说是最理想的,基于流的API(如SAX)对于只需要获取文档数据的高性能应用程序来说很重要。在本技巧文章系列中,将从基础知识开始一步步地教您如何在Java中使用XML。同时,您将学习许多甚至连众多专业人士都不知道的诀窍,所以即使您已经具有一些XML[[经验]]。 从SAX(SimpleAPIforXML)开始。虽然该API或许是Java和XMLAPI中最难以掌握的,但它可能也是功能最强的API。另外,大多数其它API实现(象DOM解析器、[[JDOM]]和dom4j等)都部分地基于SAX解析器。对于用XML和Java语言所做的每一件事情,理解SAX会给予您一个良好的开端。特别在本篇技巧文章中,将讨论如何获取SAX解析器实例以及如何对该解析器设置一些基本功能和属性。 获取SAX解析器实例 //ObtainaninstanceofanXMLReaderimplementationfromasystempropertyXMLReaderparser=org.xml.sax.helpers.XMLReaderFactory.createXMLReader(); 通过使用这个方法,您需要将系统属性org.xml.sax.driver设置成想要装入的解析器的类名。这是特定于[[供应商]]的类;对于Xerces,它应该是org.apache.xerces.parsers.SAXParser。用-D开关将这个参数指定给Java编译器: java-Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParsersome.sample.Class 当然,您要确保指定的类存在并在类路径上。 == 功能设置 == [[File:01300000165488122546517868257.jpg|thumb|sax]]一旦有了解析器实例,就需要配置它。请注意,这与设置解析器来处理XML中的错误、内容或结构不同;相反,配置是实际告诉解析器如何操作的过程。您可以打开验证、关闭名称[[空间]]检查及扩展实体。这些行为完全独立于特定的XML文档,因此涉及与新解析器实例的交互。 注:对于那些过于[[急燥]]的人来说(知道您不是这样的),当然会处理内容、错误处理及类似的东西。然而,这些主题将在未来的技巧文章中讨论,所以您还得复查。眼下,只关注配置、功能和属性。 可以用两种方法配置解析器:[[功能]]和属性。功能包括打开或关闭特定功能,比如验证。属性包括设置解析器所使用的特定项的值,如用来验证所有文档的模式位置。将先讨论功能,然后在下一节研究[[属性]]。 功能是通过解析器上名为setFeature()的方法设置的,这一点并不奇怪。 设置SAX解析器的功能 //ObtainaninstanceofanXMLReaderimplementationfromasystempropertyXMLReaderparser=org.xml.sax.helpers.XMLReaderFactory.createXMLReader();StringfeatureName="somefeatureURI";booleanfeatureOn=true;try{parser.setFeature(featureName,featureOn);}catch(SAXNotRecognizedExceptione){System.err.println("Unknownfeaturespecified:"+e.getMessage());}catch(SAXNotSupportedExceptione){System.err.println("Unsupportedfeaturespecified:"+e.getMessage());}catch(SAXExceptione){System.err.println("Errorinsettingfeature:"+e.getMessage());} 这相当清楚,不需要说明;关键是知道可用于SAX解析器的常见功能。每个功能均由一个特定的[[URI]]标识。可以从SAX网站在线获得这些URI的完整列表。 [[Category:技術應用]]
返回至
SAX
。
导航菜单
华夏文化百科
访客
个人工具
创建账户
登录
名字空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
视图
查看
查看源代码
历史
操作
搜索
华韵导航
子站导航
首页
查字
助手
经典
文集
重要典籍
家训大全
论语集释
周易
资治通鉴
竹书纪年
十三经
金瓶梅小说
古典小说
百科导航
新撰词条
近篡词条
待撰词条
随机页面
使用帮助
工具
链入页面
相关更改
特殊页面
页面信息
旧字形下载
DroidSansFallback(荐)
H-MingLiUC-98(荐)
花园明朝体九万汉字
海峰十三万汉字库
极点海峰9.5词库
更多