下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】AndroidSAX解析器怎么实现
本篇内容介绍了“AndroidSAX解析器怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让在下带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!de>RssHandlerde>类扩展了de
>org.xml.sax.helpers.DefaultHandlerde>类。该类为SAX
解析器生成的事件所对应的所有方法都提供了一个默认的非操作实现。这允许子类根据需要仅覆盖一些方法。de>RssHandlerde>
提供了一个额外的API,即de>getMessagesde>。它返回处理程序在从SAX解析器接收事件时所收集的de
>Messagede>对象列表。它有另外两个内部变量,de>currentMessagede>针对被解析的
de>Messagede>实例,以及名称为de>builderde>的de
>StringBuilderde>变量,用于存储文本节点中的字符数据。解析器将相应事件发送给处理程序时会调用de
>startDocumentde>方法,这两个变量的初始化操作就是在此时完成。查看de>startElementde>方法。在XML文档中每次遇到开始标记时都会调用它。您只关心该标记何时为de
>ITEMde>标记。对于这种情况,您将创建一个新的de>Messagede>。现在来看de
>charactersde>方法。遇到文本节点中的字符数据时便会调用此方法。数据只是被添加到de>builderde
>变量中。***,我们来看de>endElementde>方法。遇到结束标记时会调用此方法。对于与某de
>Messagede>属性相对应的标记,如de>TITLEde>和de>LINKde
>,则使用de>builderde>变量中的数据在de>currentMessagede>
上设置适当的属性。如果结束标记是一个de>ITEMde>,则de>currentMessagede>
将被添加到Messages列表中。所有这些都是非常典型的SAX解析;此处的一切都不是Android所特有的。因此,如果您知道如何编写
JavaSAX解析器,则应该知道如何编写AndroidSAX解析器。但是,androidsdk确实在SAX上添加了一些便捷的特性。AndroidSAX解析器java代码:public
class
AndroidSaxFeedParser
extends
BaseFeedParser
{
public
AndroidSaxFeedParser(String
feedUrl)
{
super(feedUrl);
}
public
List<
Message
>
parse()
{
RssHandler
handler
=
new
RssHandler();
try
{
Xml.parse(this.getInputStream(),
Xml.Encoding.UTF_8,
handler);
}
catch
(Exception
e)
{
throw
new
RuntimeException(e);
}
return
handler.getMessages();
}
}注意,这个类仍然使用了一个标准的SAX处理程序,因此您仅仅重用了所示的de>RssHandlerde>。能够重用SAX
处理程序是非常不错的,但其代码稍微有些复杂。您可以想像,如果需要解析一个更加复杂的XML文档,则处理程序可能会带来各种各样的
bug。举例来说,回头看看de>endElementde>方法。注意,在尝试设置属性之前,它检查了de
>currentMessagede>是否为null。现在,再回头看看示例XML。注意,de>ITEMde>
标记外部有一些de>TITLEde>和de>LINKde>标记。这就是使用null
检查的原因。否则,每一个de>TITLEde>标记会导致一个de>NullPointerExceptionde
>。Android提供了自己独有的SAXAPI,它排除了您编写自己的SAX处理程序的需要。经过简化的AndroidSAX解析器java代码:public
class
AndroidSaxFeedParser
extends
BaseFeedParser
{
public
AndroidSaxFeedParser(String
feedUrl)
{
super(feedUrl);
}
public
List<
Message
>
parse()
{
final
Message
currentMessage
=
new
Message();
RootElement
root
=
new
RootElement("rss");
final
List<
Message
>
messages
=
new
ArrayList<
Message
>();
Element
channel
=
root.getChild("channel");
Element
item
=
channel.getChild(ITEM);
item.setEndElementListener(new
EndElementListener(){
public
void
end()
{
messages.add(currentMessage.copy());
}
});
item.getChild(TITLE).setEndTextElementListener(new
EndTextElementListener(){
public
void
end(String
body)
{
currentMessage.setTitle(body);
}
});
item.getChild(LINK).setEndTextElementListener(new
EndTextElementListener(){
public
void
end(String
body)
{
currentMessage.setLink(body);
}
});
item.getChild(DESCRIPTION).setEndTextElementListener(new
EndTextElementListener(){
public
void
end(String
body)
{
currentMessage.setDescription(body);
}
});
item.getChild(PUB_DATE).setEndTextElementListener(new
EndTextElementListener(){
public
void
end(String
body)
{
currentMessage.setDate(body);
}
});
try
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社工站项目书撰写培训
- 沙龙活动主持人培训
- 幼儿园急救安全教育培训
- 二零二四年品牌授权经营合同4篇
- 2024版工程代理与居间合同2篇
- 2024年度特许经营合同:某连锁品牌的特许经营协议2篇
- 《爱心主题班会》课件
- 庆六一亲子活动方案
- 2024版甲方乙方合作开展教育培训项目合同3篇
- 房装修合同范本
- 医学论文投稿与评价指标
- 思政示范课程-机械零部件测绘项目申报书
- 篮球智慧树知到期末考试答案章节答案2024年宜宾职业技术学院
- 10以内加减法练习题800题
- 满族民间剪纸艺术研究
- (高清版)JTGT 5440-2018 公路隧道加固技术规范
- 《跟上兔子》绘本三年级第1季A-Red-Coat教学课件
- 工程测量专业毕业论文
- 初中物理跨学科融合教学的实践研究
- 质保金收款收据模版
- 中外合作拍摄电影片合作意向书模板
评论
0/150
提交评论