科技: 人物 企业 技术 IT业 TMT
科普: 自然 科学 科幻 宇宙 科学家
通信: 历史 技术 手机 词典 3G馆
索引: 分类 推荐 专题 热点 排行榜
互联网: 广告 营销 政务 游戏 google
新媒体: 社交 博客 学者 人物 传播学
新思想: 网站 新书 新知 新词 思想家
图书馆: 文化 商业 管理 经济 期刊
网络文化: 社会 红人 黑客 治理 亚文化
创业百科: VC 词典 指南 案例 创业史
前沿科技: 清洁 绿色 纳米 生物 环保
知识产权: 盗版 共享 学人 法规 著作
用户名: 密码: 注册 忘记密码?
    创建新词条
科技百科
  • 人气指数: 2644 次
  • 编辑次数: 1 次 历史版本
  • 更新时间: 2009-03-11
admin
admin
发短消息
相关词条
SIM卡
SIM卡
WEBSPHERE
WEBSPHERE
FTP
FTP
並行計算
並行計算
国外计算机科学状况
国外计算机科学状况
混龄教育
混龄教育
学科信息门户
学科信息门户
UBUNTU
UBUNTU
恩尼格玛
恩尼格玛
广播工程师
广播工程师
推荐词条
希拉里二度竞选
希拉里二度竞选
《互联网百科系列》
《互联网百科系列》
《黑客百科》
《黑客百科》
《网络舆情百科》
《网络舆情百科》
《网络治理百科》
《网络治理百科》
《硅谷百科》
《硅谷百科》
2017年特斯拉
2017年特斯拉
MIT黑客全纪录
MIT黑客全纪录
桑达尔·皮查伊
桑达尔·皮查伊
阿里双十一成交额
阿里双十一成交额
最新词条

热门标签

微博侠 数字营销2011年度总结 政务微博元年 2011微博十大事件 美国十大创业孵化器 盘点美国导师型创业孵化器 盘点导师型创业孵化器 TechStars 智能电视大战前夜 竞争型国企 公益型国企 2011央视经济年度人物 Rhianna Pratchett 莱恩娜·普莱契 Zynga与Facebook关系 Zynga盈利危机 2010年手机社交游戏行业分析报告 游戏奖励 主流手机游戏公司运营表现 主流手机游戏公司运营对比数据 创建游戏原型 正反馈现象 易用性设计增强游戏体验 易用性设计 《The Sims Social》社交亮 心理生理学与游戏 Kixeye Storm8 Storm8公司 女性玩家营销策略 休闲游戏的创新性 游戏运营的数据分析 社交游戏分析学常见术语 游戏运营数据解析 iPad风行美国校园 iPad终结传统教科书 游戏平衡性 成长类型及情感元素 鸿蒙国际 云骗钱 2011年政务微博报告 《2011年政务微博报告》 方正产业图谱 方正改制考 通信企业属公益型国企 善用玩家作弊行为 手机游戏传播 每用户平均收入 ARPU值 ARPU 游戏授权三面观 游戏设计所运用的化学原理 iOS应用人性化界面设计原则 硬核游戏 硬核社交游戏 生物测量法研究玩家 全球移动用户 用户研究三部曲 Tagged转型故事 Tagged Instagram火爆的3大原因 全球第四大社交网络Badoo Badoo 2011年最迅猛的20大创业公司 病毒式传播功能支持的游戏设计 病毒式传播功能 美国社交游戏虚拟商品收益 Flipboard改变阅读 盘点10大最难iPhone游戏 移动应用设计7大主流趋势 成功的设计文件十个要点 游戏设计文件 应用内置付费功能 内置付费功能 IAP功能 IAP IAP模式 游戏易用性测试 生理心理游戏评估 游戏化游戏 全美社交游戏规模 美国社交游戏市场 全球平板电脑出货量 Facebook虚拟商品收益 Facebook全球广告营收 Facebook广告营收 失败游戏设计的数宗罪名 休闲游戏设计要点 玩游戏可提高认知能力 玩游戏与认知能力 全球游戏广告 独立开发者提高工作效率的100个要点 Facebook亚洲用户 免费游戏的10种创收模式 人类大脑可下载 2012年最值得期待的20位硅谷企业家 做空中概股的幕后黑手 做空中概股幕后黑手 苹果2013营收 Playfish社交游戏架构

sax
sax

在采用DOM之后性能受到严重影响的情况下,使用Simple APIfor XML(SAX)。在用DOM耗费较长时间解析XML文件以后,你可能注意到在用DOM处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的:这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存。

 

目录

[显示全部]

基本简介编辑本段回目录

sax
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
在SAX解析器装载XML文件时,它遍历文件文档并在其主机应用程序中产生事件(经由回调函数指派函数或者任何可调用平台完成这一功能)表示这一过程。这样,编写SAX应用程序就如同采用最现代的工具箱编写GUI程序。

大多数SAX实现都会产生以下若干类型的事件:

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

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

事件通知编辑本段回目录

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

sax
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
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
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条)发表评论>>

对词条发表评论

评论长度最大为200个字符。