`
lovext
  • 浏览: 1303 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android上对非标准RSS进行解析之后的反思

阅读更多
这几天做了一个解析RSS的小东西时碰到了些问题,在这里纪录一下。

1.先说明一下碰到了问题是什么。
最开始本想做个很简单的小东西,在ANDROID下面用SAX解析RSS,
没想到SAX对SINA博客之类的用了[CDATA]的RSS解析得不完整,很多只解析出了一句。
(ps,不知道SINA这种RSS是不是标准的,也许这居于XML的东西根本就没个标准)
另外,SAX对非标准的RSS解析得更差,
这里的‘非标准RSS'是指没用[CDATA]直接在 description里面放上HTML TAG的那种。

具体的问题描述我引用下面一段话
引用

SAX处理完Element事件后, 紧接着会继续读取,并且交由characters进行处理内容.Character处理普通字符没有任何问题, 不会诱发任何监听事件. 而当遇到< [ ] 等字符时,又会触发一个新的characters事件, 也就是说, 如果你仅仅在 Characters 事件中进行处理保存数据(保存到一个变量中)的话, 是没有任何问题的, 只是遇到的时候, 发生了多次的Characters, 而你的代码上对事件的处理方式是一样的, 都是保存到变量中, 所以,变量中仅仅会保留最后一次赋值的数据. 最后一份数据正常情况下均是\n或者空格. 所以造成了,SAX无法读取CDATA数据的表象.

出自:http://www.lshine.com/index.php/2010/07/sax_cdata/comment-page-1/#comment-7226
这个博客是在刚才在重新搜索时找到的,他的分析和我之前判断的一样。
(这个SAX问题我还是没解决,显示的内容是比以前多了,但还是不完整)

当然,如果具体Parser过程有疑问,可以看这个SAX官方网站,看看原理,看看源码:
http://www.saxproject.org/about.html
(SAX最后一次更新是SAX 2.0.2 (sax2 r3),在27-April 2004…不知道ANDROID里面的是不是这个版本…)


2.再说一下怎么解决问题。
SAX不行就换别的,DOM和PullXmlParser都可以。
这里先介绍一个:
http://zhoujianghai.iteye.com/blog/755749
他的这个比我的好,我看sdk和那些Tutorials快一个月了,写个东西还不能得心应手,
真是差距啊……

人家总结的也好:
引用

1)RSS的文件结构和含义
2)解析xml文件的几种方式
3)android应用的结构和MVC模式 
4)activity的生命周期,
      activity之间通过intent通信,
      handler消息机制,
     自定义ListView,
      LinearLayout、
      RelativeLayout、
      FrameLayout布局界面,
      WebView显示网页。
      android数据存储(SQLite3)的相关操作,
      菜单和对话框、Toast的使用,
      android的测试驱动,                    (!)
      uses-permission权限配置

这些,我花了一个月都像是在盲人摸象,完全没个纲领去系统的学习。
对我而言,还应该加上多线程之类的比较基础的东西……
真的反思一下了……

最后贴个东西:
1.Android XML Parser Performance,性能分析。留着备用。
http://www.developer.com/ws/article.php/10927_3824221_2/Android-XML-Parser-Performance.htm

2.下面是另一个人的SAX和PullxmlParser的代码,我写的东西太差,就不拿出来丢人现眼了……
http://blog.chinaunix.net/u2/85805/showart_1678985.html

over.
分享到:
评论
3 楼 yxfcd 2010-12-08  
其实解决方案是有的,假设带有html的内容在<desc> ... some html code ... </desc>

1. 定义一boolean flag和StringBuilder
2. 在startElement 中检测localName 是否为desc,若是,flag置真,初始化StringBuilder
3. 在endElement 中检测localName 是否为desc,若是,flag置假,取得StringBuilder的值,即为html的内容
4. 在characters 中,只要flag值为真,追加new String(ch, start, length)到StringBuilder

代码如下:
private boolean isDescStarted = false;
private StringBuilder textDesc = new StringBuilder();

public void startElement(String namespaceURI, String localName,String qName, Attributes atts) throws SAXException {
if (localName.equals("desc")){
isDescStarted = true;
textDesc = new StringBuilder();
return;
}
//...
}

public void endElement(String namespaceURI, String localName, String qName) throws SAXException{
if (localName.equals("desc")){
isDescStarted = false;
String desc = textDesc.toString();
return;
}
//...
}


public void characters(char ch[], int start, int length){
if (isDescStarted) {
textDesc.append(new String(ch, start, length));
}
//...
}
2 楼 lovext 2010-11-26  
aa87963014 写道
CDATA 这个问题 我也遇到过,开始没有想到是android的原因

以为是开源代码的问题,也是盲人摸象 后来对比之后确定是 android api问题

之后改为其他的就好了


是的,用XmlPullParser就可以了.

但是解析CDATA ,或者”description里面直接是很多HTML TAG“的问题是SAX的处理方式造成的,我没用ANDROID自带的api,而是用的org.xml.sax,可以解析,但是只能出现一部分内容。

具体的分析在上面的说过了,但是那个连接里面提到的解决方法我试过了,仍然未能成功,有时间的话会继续研究。
1 楼 aa87963014 2010-11-26  
CDATA 这个问题 我也遇到过,开始没有想到是android的原因

以为是开源代码的问题,也是盲人摸象 后来对比之后确定是 android api问题

之后改为其他的就好了

相关推荐

    RSS解析For Android

    解析代码示例: import net.xfok.rss.parser.Feed; import net.xfok.rss.parser.Rss; ...... String url="http://www.xfok.net/news/rss.xml"; Rss rss=new rss(url); List&lt;Feed&gt; feeds=rss.getFeeds(); ...... 欢迎...

    android rss 解析 附图片

    总结来说,Android中的RSS解析涉及网络请求、XML解析、UI展示以及图片加载等多个技术点。`RssSaxActivity3.java`和`RssSaxParser.java`这两个文件分别处理了UI逻辑和数据解析,通过SAX解析器高效地处理XML数据,结合...

    RSS.zip_RSS_RSS Java_android RSS_rss android_rss android

    在Android平台上开发RSS阅读器是一项常见且实用的任务,它能够帮助用户轻松获取并阅读网络上的RSS订阅源。这个"RSS.zip_RSS_RSS Java_android RSS_rss android_rss android"项目,显然是一款针对Android设备的RSS...

    一个基于新浪RSS的android RSS阅读器源码

    《基于新浪RSS的Android RSS阅读器源码解析与学习指南》 RSS(Really Simple Syndication)是一种内容聚合格式,常用于新闻、博客等网站,让用户能够方便地获取和订阅更新内容。在移动设备上,RSS阅读器应用是访问...

    新浪RSS 阅读器 android源码

    源码分析有助于开发者理解RSS订阅和解析的过程,以及如何在Android环境下构建一个功能完善的新闻阅读应用。以下是对该源码中涉及的关键知识点的详细说明: 1. **RSS(Really Simple Syndication)**: RSS是一种XML...

    Android软件RSS阅读器源代码

    在Android平台上,RSS阅读器是一种常见的应用,它允许用户订阅并获取来自各种在线新闻源、博客和其他内容提供者的更新。这个“Android软件RSS阅读器源代码”提供了开发此类应用的具体实现,是学习和理解Android应用...

    android rss源码

    在Android平台上开发RSS阅读器应用时,源码的分析与理解是至关重要的。"android rss源码"这个项目可能是为了帮助开发者了解如何在较低版本的Android(低于0.9)中实现RSS订阅和解析功能。RSS(Really Simple ...

    android平台上简单的新浪RSS阅读器

    在Android平台上,RSS阅读器是一种常见的应用,它允许用户订阅并查看来自不同源的RSS feed,如新浪新闻。本文将详细解析一个简单的新浪RSS阅读器的实现,主要关注其核心功能——阅读文字新闻。 首先,我们需要理解...

    Android开发实例:rss阅读器 源码

    在Android平台上,RSS阅读器是一种常见的应用,它允许用户订阅并查看来自不同网站的RSS feed。这个实例将深入探讨如何构建一个基本的RSS阅读器应用,涵盖了从解析XML数据到在用户界面展示的关键技术。 首先,RSS...

    android源代码 Rss阅读器

    在这个"android源代码 Rss阅读器"项目中,开发者提供了一个自编写的源代码实例,旨在帮助初学者和经验丰富的开发者了解如何在Android上构建一个功能完善的RSS阅读器。 首先,我们来深入理解RSS(Really Simple ...

    Android源码——Rss订阅源码Demo.7z

    《Android源码解析:Rss订阅源码Demo》 在移动开发领域,Android以其开源、灵活的特性,深受开发者喜爱。对于许多应用来说,实时获取并展示新闻资讯是必不可少的功能,而RSS(Really Simple Syndication)订阅就是...

    android rss阅读器源码

    Android RSS阅读器源码是一个专门为Android平台设计的应用程序,它能解析RSS feed并显示在用户友好的界面上。下面我们将深入探讨该源码中的关键知识点。 1. **XML解析**: Android RSS阅读器首先需要处理XML文件,...

    Android综合案例——RSS阅读器实源代码+讲解

    在本教程中,我们将深入探讨如何使用Android开发一个RSS阅读器应用。RSS(Really Simple Syndication)是一种数据格式,用于发布新闻、博客和其他定期更新的内容。RSS阅读器可以帮助用户订阅并集中阅读这些内容,...

    Google.Android开发入门与实战第12章.Android综合案例一——RSS阅读器实例

    通过以上知识点的学习和实践,开发者不仅可以掌握RSS阅读器的开发,还能提升在Android平台上的综合开发能力,包括网络编程、数据处理、UI设计和性能优化等方面。同时,利用类似“www.heyjava.com.url”这样的资源,...

    android_RSS经典开发教程

    RSS(Really Simple Syndication)作为一种标准化的格式,用于聚合网站上的内容,并让用户能够订阅这些内容更新。随着移动互联网的发展,RSS阅读器成为了一个重要的应用领域。Android平台作为当今最流行的移动操作...

    基于Android平台的RSS阅读器的设计与开发

    基于Android平台的RSS阅读器在当前市场上的数量有限,且多数产品在功能上存在不足,如无法有效过滤无关信息,导致用户消耗额外的移动数据流量。 #### 三、关键技术介绍 - **Android系统架构**: - Android系统由...

    iPhone xml rss解析

    本示例主要探讨如何在iPhone应用中解析XML结构的RSS feed,以便将新闻标题展示在表格视图中。 首先,让我们了解XML的基本概念。XML是一种标记语言,用于描述数据的结构和内容。它使用自定义的标签来表示数据,使得...

    Android RSS阅读器

    在IT行业中,RSS(Really Simple Syndication)是一种用于发布和订阅网络内容的标准化格式,它使得用户无需直接访问各个网站就能获取更新的信息。一个Android RSS阅读器应用是专门设计用来帮助用户管理和阅读RSS源的...

    android_RSS开发教程

    为了让开发者能够利用Android平台的便利性,本教程《android_RSS开发教程》将会详细介绍如何使用Android Developer Tools,进行RSS的读取、解析和显示。这不仅为Android平台提供了有效的信息获取方式,还对XML数据...

    基于Android 平台的RSS阅读器的开发

    本文主要介绍了基于Android平台的RSS阅读器的开发过程,旨在满足人们对外界信息了解的需求。该系统是在Android平台下设计的,在Google Android平台的SDK 2.1环境下,运用Eclipse进行开发。 Android平台的相关理论...

Global site tag (gtag.js) - Google Analytics