付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年信阳学院专科单招综合素质考试题库及答案详解(网校专用)
- 2025年滨州科技职业学院单招综合素质考试模拟试卷(培优A卷)附答案详解
- 2024年秦皇岛山海文旅职业学院高职单招职业技能考试模拟试卷及答案详解(全优)
- 2025年洛阳职业技术学院高职单招职业适应性测试考试模拟试卷及答案详解1套
- 2025年黄河水利职业技术学院高职单招职业技能考试题库附完整答案详解(全优)
- 2025年陕西大荔职业学院高职单招职业适应性测试考试模拟试卷附答案详解(模拟题)
- 2024年宜宾金沙江职业学院高职单招职业适应性测试考试题库一套附答案详解
- 2026年湖北省孝感市单招综合素质考试题库【重点】附答案详解
- 2024年汉水茶产业学院单招综合素质考试题库及答案详解【名师系列】
- 2025年莱芜职业技术学院单招职业技能考试模拟试卷带答案详解(黄金题型)
- 拆迁信访应急预案
- 2025广东中山市三乡镇人民政府招聘聘用人员(屠宰检疫员)9人备考题库及答案解析
- 化验室气瓶安全知识培训课件
- 口腔神经阻滞麻醉
- 月子中心消防管理制度
- 2025-2030中国财务公司行业深度分析及发展前景与发展战略研究报告
- 脯氨酸恒格列净片-药品临床应用解读
- 煤矿智能化开采技术实习报告范文
- 血栓患者护理
- 沪光股份营运资金管理存在问题及对策分析
- 《水利工程造价与招投标》课件-14.施工机械台时费及计算
评论
0/150
提交评论