android xml defaulthandler解析,sax解析xml文件的DefaultHandler处理类

一千年的时光,我无数次掀起岁月的帷幔,只为和你,在某一个平静如水的日子相遇,然后相识,倾情一生,缱绻一世,好美的散文,好吧,我情愿把这个“你”当作android;),使用sax解析xml文件是我见到过的最为简单的一种解析xml的方式了。java主要代码:

SAXParserFactory factory =SAXParserFactory.newInstance();

SAXParser parser=factory.newSAXParser();

XMLReader xmlReader=parser.getXMLReader();

xmlReader.setContentHandler(mRSSHandler);

xmlReader.parse(new InputSource(mStream));

这里要说明的是sax使用的工厂设计模式,通过SAXParserFactory 获取解析器parser ,在从解析器中获得解析xml文件的xmlReader

,但是在xmlReader

读取流式的xml文件时,需要完成一个RSSHandler的设置,RSSHandler是继承的DefaultHandler,所以这篇文章着重详解使用sax解析xml文件的DefaultHandler处理类。这里我以解析网站的rss.xml文件为例,下面我们先看rss.xml的文件格式:

xml/html代码:

Ubuntu11.04(10.04)安装dos工具dosemu

http://www.ourunix.org/post/276.html

ourunix@163.com (walfred)

玩转Linux

Mon, 16 Jan 2012 22:54:53 +0800

看完介绍之后,发现这是继wine之后的有一款linux类win工具了,所以现在直接上文介绍dosemu在ubuntu Linux上的安装步骤及使用其运行dos游戏:魂斗罗~~~

RSSHandler继承的DefaultHandler处理类就是专门来解析这个文件的,看下我们必须完成的接口:

public voidstartDocument () {//开始解析文档

}public voidendDocument () {//文档解析结束

}public voidstartElement (String uri, String localName, String qName, Attributes attributes) {//开始解析节点

}public void characters (char[] ch, int start, intlength) {//保存节点内容

}public voidendElement (String uri, String localName, String qName) {//结束解析节点

}

一般前两个方法,开始解析和结束解析文档的不需要做处理外,我们的所有操作都是在解析节点部分,我们调用startElement

开始解析节点,然后调用characters 保存节点的内容,最后调用endElement ,如此循环而已,可以看下解析rss的示例:

public class RSSHandler extendsDefaultHandler {privateContext mContext;privateRSSItem mRSSItem;privateRSSDBInterface mRSSDBInterface;private final int TITLE_STATE = 1;private final int AUTHOR_STATE = 2;private final int LINK_STATE = 3;private final int DESCRIPTION_STATE = 4;private final int CATEGORY_STATE = 5;private final int PUBDATE_STATE = 6;//标记当前节点

private intcurrentState;publicRSSHandler(Context ctx){

mContext=ctx;//初始化当前节点标记为0

currentState = 0;//数据库接口

mRSSDBInterface = newRSSDBInterface(mContext);

}public voidstartDocument () {//开始解析文档

mRSSItem = newRSSItem();

}public voidendDocument () {//文档解析结束

}public voidstartElement (String uri, String localName, String qName, Attributes attributes) {//开始解析节点

if (localName.equals("channel")){return;

}if (localName.equals("item")){//当遇到一个item节点时,就实例化一个RSSItem对象

mRSSItem = newRSSItem();return;

}if (localName.equals("title")){

currentState=TITLE_STATE;return;

}if (localName.equals("author")){

currentState=AUTHOR_STATE;return;

}if (localName.equals("description")){

currentState=DESCRIPTION_STATE;return;

}if (localName.equals("link")){

currentState=LINK_STATE;return;

}if (localName.equals("category")){

currentState=CATEGORY_STATE;return;

}if (localName.equals("pubDate")){

currentState=PUBDATE_STATE;return;

}

}public voidendElement (String uri, String localName, String qName) {//这是节点解析完成时调用的,这里我们遇到item的时候才调用下面的

if(localName.equals("item" && mRSSItem != null)){

ContentValues values= newContentValues();

values.put(RSSDBInfo.Columns._TITLE, mRSSItem.getTitle());

values.put(RSSDBInfo.Columns._AUTHOR, mRSSItem.getAuthor());

values.put(RSSDBInfo.Columns._CATEGORY, mRSSItem.getCategory());

values.put(RSSDBInfo.Columns._DESCRIPTION, mRSSItem.getDescription());

values.put(RSSDBInfo.Columns._LINK, mRSSItem.getLink());

values.put(RSSDBInfo.Columns._PUBDATE, mRSSItem.getPubdate());

values.put(RSSDBInfo.Columns._ISREAD, RSSUtils.ARTICALE_UNREAD);

mRSSDBInterface.insertRSStoDB(values);

}

}public void characters (char[] ch, int start, intlength) {

String theString= newString(ch, start, length);switch(currentState){caseTITLE_STATE:

mRSSItem.setTitle(theString);

currentState= 0;break;caseAUTHOR_STATE:

mRSSItem.setAuthor(theString);

currentState= 0;break;caseLINK_STATE:

mRSSItem.setLink(theString);

currentState= 0;break;caseDESCRIPTION_STATE:

mRSSItem.setDescription(theString);

currentState= 0;break;caseCATEGORY_STATE:

mRSSItem.setCategory(theString);

currentState= 0;break;casePUBDATE_STATE:

mRSSItem.setPubdate(theString);

currentState= 0;break;

}

}

}

这就SAX的工厂模式的解析。

注释:ContentValues 是类似Map一样的类,存储键值的。

InputSource 主要就是用的解析的输入流列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android中viewpager+fragment,Android开发之ViewPager+Fragment

使用步骤1、Activity的布局文件android:id"id/viewpager"android:layout_width"wrap_content"android:layout_height"wrap_content"android:layout_gravity"center" >2、加载要显示的Fragment,这里要注意,导…

19年的华为手机还能搭载鸿蒙吗,2019年华为手机出货或超2.15亿部 鸿蒙系统最快10月首秀...

科客点评:备用方案可以说是越多越好,这样的确能有效避免突发事件所带来的巨大风险。6月13日,知名分析师郭明錤给出了有关华为的最新预测报告,该预测报告主要对华为手机今年的出货量进行了预测。根据分析师郭明錤的报告显示&#x…

android 活动传递数据,如何在Android应用程序的“活动”之间传递数据?

我有一种情况,在通过登录页面登录后,每个activity上都会有一个退出button 。点击sign-out ,我将传递已登录用户的session id以便退出。 谁能指导我如何使session id可供所有activities ?这种情况的任何替代方法#1楼在活动之间传递…

面试时Android屏幕适配,Android—屏幕适配(面试技巧)

1.明白如下几个概念&#xff1a;屏幕尺寸&#xff0c;屏幕分辨率以及屏幕像素密度。<1>屏幕尺寸&#xff1a;指的是屏幕对角线的长度。以手机为例&#xff0c;常见的有4.2、5.0、5.5等。。<2>屏幕分辨率&#xff1a;指横纵向上的像素点数&#xff0c;单位是dpi&…

html5如何新建定义站点,HTML5技术教程:创建新作品_HTML5教程_创建作品_添加元素_课课家...

我们所熟知的HTM5软件是一款非常强大功能的软件&#xff0c;据我了解HTM5软件的特色也是非常有优势的。我们先来介绍一下它的优势&#xff1a;HTML5可以提供:①&#xff1a;提高可用性和改进用户的友好体验;②&#xff1a;有几个新的标签&#xff0c;这将有主(助?)开发人员定义…

android cordova 教程,cordova入门教程(一)

一、创建cordova项目执行命令&#xff1a;//全局安装cordova命令行工具npm install -g cordova//创建项目cordova create hello com.example.hello HelloWorldcd hello//执行这步之前需要安装android studio android sdk 并且配置好相应的环境变量,最好是最新版&#xff0c;不…

html 适配iphonex,有关HTML5页面在iPhoneX适配问题

这次给大家带来有关HTML5页面在iPhoneX适配问题&#xff0c;有关HTML5页面在iPhoneX适配的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。1. iPhoneX的介绍屏幕尺寸倍图其实就是像素尺寸和开发尺寸的倍率关系&#xff0c;但这只是外在的表现。倍图核心…

html5 css3考试f卷,HTML5 CSS3 JavaScriptWeb前端开发自测试卷3.docx

自测试卷3一、选择题1&#xff0e;编写网页的过程中&#xff0c;下面那种注释不正确( )。A&#xff0e;B&#xff0e;//注释C&#xff0e;D&#xff0e;/*注释*/2&#xff0e;和标签说法不正确的是( )。A&#xff0e;标签是块级元素B&#xff0e;标签是内联元素C&#xff0e;都…

app inventor HTML5,[App Inventor] Web客戶端元件 POST 傳值的使用方式

過去在開發App時&#xff0c;Web客戶端元件大部份都以Get的方式進行值的傳遞。那可以用POST嗎&#xff1f;以下簡單的範例&#xff0c;我們將使用Web客戶端元件以POST的方式傳值給一個PHP程式&#xff0c;然後再返回結果顯示在App中。1. 如下圖我們新增一個專案&#xff0c;在工…

html安卓手机打开后只有半屏,宽度设置100%在移动端时变成一半

html代码&#xff1a;手机电脑DIY数码外设智能css代码&#xff1a;.nav-body{position: relative;overflow: hidden;width:100%;height: 400px;}.nav-img{position: absolute;z-index:-1;}.nav-img a{display: block;width:100%;}.nav-img img{height: 400px;width:100%;min-wi…

学计算机U盘内存,在U盘上设置虚拟内存

Zhenbo问答网络江湖小溪饭男人&#xff0c;是的&#xff0c;但是没有。VISTA可以使用U盘来提高性能的原因&#xff0c;必须首先了解3233363533e58685e5aeb9337。这种称为readyboost的技术不使用闪存作为内存&#xff0c;而只是一种加速硬盘读取的技术。硬盘在大容量存储和传输速…

手机uc新窗口打开的html标签,在电脑UC浏览器的新窗口页中如何打开书签

在电脑UC浏览器的新窗口页中如何打开书签UC浏览器是一个很不错的查询资料的软件&#xff0c;我们可以在UC浏览器的新标签页中打开书签&#xff0c;那么如何打开呢&#xff1f;小编就来为大家介绍一下吧。具体如下&#xff1a;1. 第一步&#xff0c;双击并打开UC浏览器软件。2. …

html5版堆糖,堆糖(Duitang)

堆糖的开发背景对于每天都要和互联网打交道的用户来说&#xff0c;在使用Chrome的过程中会遇到很多很多有用的内容&#xff0c;或是一篇文章或是一张图片&#xff0c;用户如果想要保存这些内容大部分都是直接下载到本地进行保存&#xff0c;但是随着电脑保存的内容越来越多&…

html默认下面,阅读下面配置web默认页面index.html的代码 index.html 下面选项中,说法正确的是() (多选)...

【判断题】白酒的品尝三部曲为:观其色、闻其香和品其味。【单选题】以下不属于釉下彩的是【单选题】在流动性偏好理论框架中,利率是由下列哪项的需求和供给决定的?( )【单选题】假想投影画法中用()画出一个极限位置,用()画出其余位置的假想投影【单选题】看到了姜夔的诗以后,感…

北工大计算机网络基础期末考试,2013北工大计算机网络应用复习提纲整理版.doc...

复习提纲计算机网络发展的四个阶段及每个阶段的特征第一阶段&#xff1a;面向终端的计算机网络由于终端没有独立处理数据的能力&#xff0c;因此并不是真正意义上的计算机网络。但在这个阶段中&#xff0c;逐步开始了计算机技术与通信技术相结合的研究&#xff0c;是当代计算机…

如何用计算机直接做工资表,超简单一招!用Excel十秒快速制作工资条

年中到了&#xff0c;财务部的同志们又该挠头了吧。现在很多企业都在使用excel做工资表。不过正如你所知道的&#xff0c;做好的工资表与发出的工资条之间总是少了一样很重要的东东——表头。为了搞定这个表头&#xff0c;各路大神可谓各显神通&#xff0c;比如有的用公式搞定&…

计算机数字媒体专业毕业论文,数字媒体艺术专业毕业论文

数字媒体艺术专业毕业论文简介:此栏目为数字媒体艺术和毕业论文和专业相关的范例,免费教你怎么写视觉传达设计专业考研提供有关参考文献资料。一、引言在社会经济不断发展的今天&#xff0c;人们对自身精神文化越来越重视&#xff0c;数字媒体艺术也得到了迅速发展&#xff0c;…

计算机二级旅游推广ppt,计算机二级PPT真题:制作旅游产品推广PPT

1.本节课我们进行讲解演示文稿题&#xff0c;我们先来看一下题目如图所示。2.我们新建一个PPT&#xff0c;然后我们进行插入我们的ppt素材如图所示保存文件。3.接下来我们看一下第二小题如图所示。4.我们点击【设计】点击【浏览主题】找到我们的主题进行应用。5.接下来我们进行…

计算机二级vb2003年4月考试题,2003年4月全国计算机等级考试二级vb笔试真题附答案...

2003年4月全国计算机等级考试二级vb笔试真题附答案 (19页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;15.9 积分2003年4月全国计算机等级考试二级VB语言笔试试题及答案  一、选择题((1)一(20)每小…

计算机应用技术研究生开题报告,计算机应用技术专业论文开题报告.doc

计算机应用技术专业论文开题报告一、题目基于性能和功耗权衡模型的分时系统动态调频技术研究二、相关技术发展现状1 ACPI技术2 DVFS技术3 处理器性能监控技术三、论文的工作本节概述本论文所做的工作。首先根据前面描述的研究背景和动机制定研究目标&#xff0c;然后结合相关技…