首页资讯商务会员钢材特钢不锈炉料铁矿废钢煤焦铁合金有色化工水泥财经指数人才会展钢厂海外研究统计数据手机期货论坛百科搜索导航短信English
登录 注册

按字母顺序浏览 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

热门关键字: 螺纹钢 铁矿石 电炉 炼钢 合金钢 转炉 结构钢
钢铁百科 - 钢之家

sax发表评论(0)编辑词条

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。

sax-文档解析      

    在SAX解析器装载XML文件时,它遍历文件文档并在其主机应用程序中产生事件(经由回调函数、指派函数或者任何可调用平台完成这一功能)表示这一过程。这样,编写SAX应用程序就如同采用最现代的工具箱编写GUI程序。
    大多数SAX实现都会产生以下若干类型的事件:

    在文档的开始和结束时触发文档处理事件。
    在文档内每一XML元素接受解析的前后触发元素事件。任何元数据通常都由单独的事件交付。
    在处理文档的DTD或Schema时产生DTD或Schema事件。
    错误事件用来通知主机应用程序解析错误。

    显而易见,在处理文档时你最关心的就是元素事件了。通常,SAX解析器会向你的主机应用程序提供包含元素信息的事件参数;在最低程度下也会提供元素的名字。具体取决于你的特定实现,可以定义不同类型的元素事件代表不同类型元素的处理。例如,注释元素(它可能包含主机应用程序的处理指令)就经常在接受处理时产生特殊的事件。

sax-事件通知       
    假如把程序清单A中的XML文件装入了SAX解析器,那么你可能会在你的主机应用程序中收到以下事件通知:

    DocumentStart
    ElementStart“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应用程序则更具一般性。

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解析器实例

    //ObtainaninstanceofanXMLReaderimplementationfromasystemproperty
    XMLReaderparser=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

    当然,您要确保指定的类存在并在类路径上。

sax-功能设置       

    一旦有了解析器实例,就需要配置它。请注意,这与设置解析器来处理XML中的错误、内容或结构不同;相反,配置是实际告诉解析器如何操作的过程。您可以打开验证、关闭名称空间检查及扩展实体。这些行为完全独立于特定的XML文档,因此涉及与新解析器实例的交互。
    注:对于那些过于急燥的人来说(知道您不是这样的),当然会处理内容、错误处理及类似的东西。然而,这些主题将在未来的技巧文章中讨论,所以您还得复查。眼下,只关注配置、功能和属性。

    可以用两种方法配置解析器:功能和属性。功能包括打开或关闭特定功能,比如验证。属性包括设置解析器所使用的特定项的值,如用来验证所有文档的模式位置。将先讨论功能,然后在下一节研究属性。

    功能是通过解析器上名为setFeature()的方法设置的,这一点并不奇怪。

    设置SAX解析器的功能

    //ObtainaninstanceofanXMLReaderimplementationfromasystemproperty
    XMLReaderparser=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的完整列表。

→如果您认为本词条还有待完善,请 编辑词条

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
0

标签: sax

收藏到: Favorites  

同义词: 暂无同义词

关于本词条的评论 (共0条)发表评论>>

您希望联系哪位客服?(单击选择)