PULL解析入门

PULL解析入门PULL解析技术案例关于Android的pull解析技术详解对于一个很少写作的人来说,写一篇博客还算比较困难的,但是面对困难岂有退缩之理,好了废话说完了,开始进入正题。对于Android来说pull解析xml类型的文件应该是非常简单的,当然这是pull解析本身特性所决定的,那么接下来就跟随我的脚步来看一看pull解析的小巧之处吧。首先我从网上找了一个api接口[RRS腾讯](http://r

大家好,又见面了,我是你们的朋友全栈君。

PULL解析技术案例

关于Android的pull解析技术详解

对于一个很少写作的人来说,写一篇博客还算比较困难的,但是面对困难岂有退缩之理,好了废话说完了,开始进入正题。


    对于Android来说pull解析xml类型的文件应该是非常简单的,    
      当然这是pull解析本身特性所决定的,那么接下来就跟随我的脚步来    看一看pull解析的小巧之处吧。

习到pull解析技术,因为本api接口中的内容全部都是以xml解析的形式暴露 给大家的,该api中的一个国内新闻接口
请点击文字进行跳转。

<rss version="2.0">
  <channel>
    <title>新闻国内</title>
    <image>
      <title>新闻国内</title>
      <link>http://news.qq.com</link>
      <url>http://mat1.qq.com/news/rss/logo_news.gif</url>
    </image>
    <description>新闻国内</description>
    <link>http://news.qq.com/china_index.shtml</link>
    <copyright>Copyright 1998 - 2005 TENCENT Inc. All Rights Reserved</copyright>
    <language>zh-cn</language>
    <generator>www.qq.com</generator>
    <item>
      <title>广西律师“半裸”和法院说法不一 要求公布监控</title>
      <link>http://news.qq.com/a/20160604/030486.htm</link>
      <author>www.qq.com</author>
      <category/>
      <pubDate>2016-06-04 19:05:45</pubDate>
      <comments/>
      <description>  广西律师吴良述为其代理的一起民事纠纷案到南宁市青秀区法院立案,出门时已呈“半裸”状。本文图片均来自财新网  6月3日,广西律师吴良述为其代理的一起民事纠纷案到南宁市青秀区法院立案,出门时已呈“半裸”状,一条裤腿被撕开,衬衫也敞着怀。他称,因拒绝法警强行检查其随身物品遭殴打,衣服被撕烂。  事发后</description>
    </item>
    <item>
      <title>留德遇害女生将被接回河南老家:期盼一个交代</title>
      <link>http://news.qq.com/a/20160604/030317.htm</link>
      <author>www.qq.com</author>
      <category/>
      <pubDate>2016-06-04 18:57:47</pubDate>
      <comments/>
      <description>中国姑娘李洋洁生前照片。新华网6月4日消息,如果一切顺利,今年7月,中国姑娘李洋洁就该从德国安哈尔特应用技术大学毕业。成为一名建筑设计师是她的理想,但这个理想如今已没有实现的可能:5月11日晚,李洋洁外出跑步后再也没能回来,一起暴力犯罪夺走了她年轻的生命。“单纯”、“认真”、“充满正能量”……这是与李洋</description>
    </item>

根据这段xml文件不知道大家发现没有,如果我只想提取<item>元素中的内容那么前面有一大部分是不需要解析出来的因此这就体现了pull解析的小巧之处,固然没有JSON解析那么方便,但是xml的普遍性还是大家有目共睹的吧。接下来就到了代码时刻,我会详细讲解为何要这么做。Let`s go.

public class ParseUtils {
    public static List<channel> Parse(String values) {
        List<channel> news = null;
        channel content = null;
        try {
            XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = xmlPullParserFactory.newPullParser();
            String iso_8859_1 = new String(values.getBytes("ISO_8859_1"), "UTF-8");
            parser.setInput(new StringReader(iso_8859_1));
            int eventType = parser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                String name = parser.getName();
                switch (eventType) {
                    case XmlPullParser.START_DOCUMENT:
                        news = new ArrayList<channel>();
                        break;
                    case XmlPullParser.START_TAG:
                        if (("item").equals(name)) {
                            content = new channel();
                        }
                        else if ("title".equals(name)) {
                            if (content != null) {
                                content.setTitle(parser.nextText());
                            }
                        } else if ("link".equals(name)) {
                            if (content != null) {
                                content.setLink(parser.nextText());
                            }
                        } else if ("description".equals(name)) {
                            if (content != null) {
                                content.setDescription(parser.nextText());
                            }
                        } else if ("pubDate".equals(name)) {
                            if (content != null) {
                                content.setPubDate(parser.nextText());
                            }
                        }

                        break;
                    case XmlPullParser.END_TAG:
                        if (("item").equals(name)) {
                            news.add(content);
// newspager = null;
                        }
                        break;
                }
                eventType = parser.next();
            }
            return news;
        } catch (Exception e) {
            e.printStackTrace();
        news.size()+"");
        }
        return null;
    }
}

首先我们需要建立一个XmlPullParserFactory工程,获取其实例NewInstance 。通过setinput来写入需要解析的数据。setinput 支持字节流和Reader类型字符串,这个要根据个人选择,在这里我选择了StringReader来进行-可以看到在我加入解析前,我进行了一些字符串转码,应对一些乱码问题。接下来就要详细介绍一些xml结构的介绍。

首先介绍xml如何进行相应的判断

  • XmlPullParser.END_DOCUMENT
    这个参数是判断一个xml最大范围。这个属性的作用是判断整个xml文件的开始和结束,可以说这个参数是我们小区的门卫,要想进小区呢!就先得经过门卫保安的同意,同样离开也一样需要去登记离开。
  • XmlPullParser.START_TAG
    这个参数是判断一个子范围所包含内容的开始。就好像每个小区中的每个小家一样,我想了解小区某个人家中的各个房间布局一样,我们需要先开门,因此这就是那个户的门。
  • XmlPullParser.END_TAG
    这个参数是判断刚才提及的子范围中结束的标志,这里我们可以进行一些操作,打个比方就是将每户家中的布局进行记录,并汇总给装修公司。装修公司可以提取每个用户的数据。

看到这里大家应该对pull解析有一定理解了吧。

接下来大家就要动手进行操作了,毕竟说的不不如动手学习多。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162764.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • vue监听页面刷新事件_vue监听数据变化自动刷新

    vue监听页面刷新事件_vue监听数据变化自动刷新运用的知识点:JavaScript的onbeforeunload函数使用方法window.onbeforeunload=function(){  return‘’;}注意:有返回值(”,true,false…都可以)才能弹出显示,或者有需要执行的事件也行。onload、onunload、onbeforeunload的执行问题:页面加载…

    2022年10月24日
  • 各种系统架构图与详细说明

    各种系统架构图与详细说明共享平台逻辑架构设计 如上图所示为本次共享资源平台逻辑架构图,上图整体展现说明包括以下几个方面:1应用系统建设本次项目的一项重点就是实现原有应用系统的全面升级以及新的应用系统的开发,从而建立行业的全面的应用系统架构群。整体应用系统通过SOA面向服务管理架构模式实现应用组件的有效整合,完成应用系统的统一化管理与维护。2应用资源采集整体应用系统资源统一分为两类,具体包…

  • Java对象与JSON字符串互相转换

    Java对象与JSON字符串互相转换目录一、Java对象转为JSON字符串二、JSON字符串转为Java对象JSON解析器,常见的解析器:Jsonlib,Gson,fastjson,jackson介绍:Jackson一、Java对象转为JSON字符串1、引入需要的Jackson所需要的jar包(三个)2、创建一个Person类(代码见后面)注解1,@JsonIgnore作用:排除属性 注解2…

  • GATK流程_diskeeper怎么用

    GATK流程_diskeeper怎么用一、使用GATK前须知事项:(1)对GATK的测试主要使用的是人类全基因组和外显子组的测序数据,而且全部是基于illumina数据格式,目前还没有提供其他格式文件(如IonTorrent)或者实验设计(RNA-Seq)的分析方法。(2)GATK是一个应用于前沿科学研究的软件,不断在更新和修正,因此,在使用GATK进行变异检测时,最好是下载最新的版本,目前的版本是2.8.1(2014-02

    2022年10月21日
  • PLSQL Developer连接Oracle11g 64位数据库配置详解

    PLSQL Developer连接Oracle11g 64位数据库配置详解最近换了台64bit的电脑,所以oracle数据库也跟着换成了64bit的,不过问题也随之产生,由于plsqldeveloper暂时没有64bit版本的,所以无法连接到64bit的oracle上,经过一番折腾,终于成功连接到数据库上,现记录下配置过程,以便查看。

  • VS2005卸载问题「建议收藏」

    VS2005卸载问题「建议收藏」由于本人的VS2005是中英文结合的(先安装了中文版的,卸载不彻底后,又安装了英文版,造成了中英文结合的),所以在开发的时候,在遇到一些细节的时候,总是会存在编译错误,就是由于这种结合体造成的,为了净化自己的开发环境,今天决定彻底的删除这个结合体,该为英文版。重装了好几次终于成功。以下为成功步骤:先在“控制面板”的“添加删除程序中”删除所有相关…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号