pull和sax解析xml文件_pull 和 sax-程序员宅基地

技术标签: Android进阶  

/***
     * pull解析
     **/
    public void parseXMLWithPull(String xmlData) {
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = factory.newPullParser();
            parser.setInput(new StringReader(xmlData));
            int evenType = parser.getEventType();
            String id = "";
            String name = "";
            String version = "";
            while (evenType != XmlPullParser.END_DOCUMENT) {
                String nodeName = parser.getName();
                switch (evenType) {
                    //开始解析某个结点
                    case XmlPullParser.START_TAG:
                        if ("id".equals(nodeName)) {
                            id = parser.nextText();
                        } else if ("name".equals(nodeName)) {
                            name = parser.nextText();
                        } else if ("version".equals(nodeName)) {
                            version = parser.nextText();
                        }
                        break;
                    //完成解析某个结点
                    case XmlPullParser.END_TAG:
                        if ("app".equals(nodeName)) {
                            Log.i("xmlParseActivity", "id is " + id);
                            Log.i("xmlParseActivity", "name is " + name);
                            Log.i("xmlParseActivity", "version is " + version);
                        }
                        break;
                    default:
                        break;
                }
                evenType = parser.next();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /***
     * SAX解析
     ***/
    public void parseXmLWithSAX(String xmlData) {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            XMLReader reader = factory.newSAXParser().getXMLReader();
            //将ContentHandler的实例设置到XMLReader中
            ContentHandler handler = new ContentHandler();
            reader.setContentHandler(handler);
            //开始执行解析
            reader.parse(new InputSource(new StringReader(xmlData)));
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /***
     * SAX解析调用的方法
     ***/
    public class ContentHandler extends DefaultHandler {
    
        private String nodeName;
        private StringBuilder id;
        private StringBuilder name;
        private StringBuilder version;

        public ContentHandler() {
            super();
        }

        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
            id = new StringBuilder();
            name = new StringBuilder();
            version = new StringBuilder();
        }

        @Override
        public void endDocument() throws SAXException {
            super.endDocument();
        }

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);
            //记录当前结点名
            nodeName = localName;
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            super.endElement(uri, localName, qName);
            if ("app".equals(localName)) {
                Log.i("contentHandler", "id is " + id.toString().trim());
                Log.i("contentHandler", "name is " + name.toString().trim());
                Log.i("contentHandler", "version is " + version.toString().trim());
                //最后将StringBuilder清空掉
                id.setLength(0);
                name.setLength(0);
                version.setLength(0);
            }
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);
            //根据当前的结点名判断将内动添加到哪一个StringBuilder对象中
            if ("id".equals(nodeName)) {
                id.append(ch, start, length);
            } else if ("name".equals(nodeName)) {
                name.append(ch, start, length);
            } else if ("version".equals(nodeName)) {
                version.append(ch, start, length);
            }
        }
    }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/uniquemei/article/details/52383459

智能推荐

Vue接口请求取消(AbortController 和 CancelToken)_vue取消请求-程序员宅基地

文章浏览阅读2.9k次。Vue接口请求取消_vue取消请求

Oracle、MySQL、SQLserver、DB2等搬砖中常用函数整理~-程序员宅基地

文章浏览阅读324次。最近工作需要针对不同的客户经常切换使用不同的数据库,不同的数据库不同的函数把比较常用的一些函数整理一下,便于后续查找。

【ghost初级教程】 怎么搭建一个免费的ghost博客-程序员宅基地

文章浏览阅读259次。ghost博客系统无疑是这个月最火热的话题之一,这个号称”只为博客“的系统,早在项目开始之初就受到了众人的关注。它使用了当前最火热node.js技术,10月14日发布了V0.3.3版本。江湖传言它将是下一个wordpress。下面来看几张ghost博客的截图:看起来很酷,对吧!更重要的是搭建一个ghost博客非常非常的简单,ghost小组甚至在未来的几周之内会推出一项host服务,..._ghost博客如何关闭注册

《第一行代码Android》笔记十二:Android代码混淆ProGuard工作原理简介_keepclassmembers public class * extends android.vi-程序员宅基地

文章浏览阅读215次。ProGuard能够对Java类中的代码进行压缩(Shrink),优化(Optimize),混淆(Obfuscate),预检(Preveirfy) .1。压缩(Shrink):在压缩处理这一步中,用于检测和删除没有使用的类,字段,方法和属性   .2。优化(Optimize):在优化处理这一步中,对字节码进行优化,并且移除无用指令   .3。混淆(Obfuscate):在混..._keepclassmembers public class * extends android.view.view

C/C++STL常用容器用法总结_stl容器用法总结-程序员宅基地

文章浏览阅读3.3w次,点赞48次,收藏293次。一、容器概念:容器是储存其他对象的对象。被储存的对象必须是同一类型。基本特征:以下用X表示容器类型(后面会讲到),T表示储存的对象类型(如int);a和b表示为类型X的值;u表示为一个X容器的标识符(如果X表示vector<int>,则u是一个vector<int>对象。)表 达 式 返 回 类 型 说 明 复 杂 度 X::iterator 指向T的迭代器..._stl容器用法总结

laravel配置完database后不生效_laravel database文件加载无效-程序员宅基地

文章浏览阅读5.4k次。laravel配置完database后不生效1.配置database2.cmd下 cd 当前项目根目录3.刷新配置php artisan config:cache完成_laravel database文件加载无效

随便推点

Java----冒泡排序(BubbleSort)_冒泡排序csdnjavabubblesortpanle-程序员宅基地

文章浏览阅读413次。冒泡排序(BubbleSort)源代码:public class BubbleSort { public static void main(String[] args) { int[] arr = { 10, 7, 2, 9, 3, 5 }; int t; System.out.println("排序前的数组为:"); ..._冒泡排序csdnjavabubblesortpanle

oracle 常用写法--Union与Union All_oracle union和union all写法-程序员宅基地

文章浏览阅读2.1k次。Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序; Union All:对两个结果集进行并集操作,包括重复行,不进行排序;_oracle union和union all写法

crontab计划任务统计内存使用情况_crontab占用内存-程序员宅基地

文章浏览阅读629次。编写crontab任务:每一分钟记录一次当前系统的内存使用情况,并附带时间。审题,题目要求1.查看系统内存使用情况2.把查看的内容记录下来3.附带时间4.编写crontab任务实验操作审题,题目要求1.查看系统内存使用情况top命令可以查看动态的内存使用情况2.把查看的内容记录下来可以用重定向符 >表示覆盖;>>表示追加。因为我们记录的并不只是一次,所以我们用>>3.附带时间实时时间,可以用date命令4.编写crontab任务crontab -e 命令直接编_crontab占用内存

spring mybatis 整合后mapper接口注入失败问题_mybatis mapper接口 为空-程序员宅基地

文章浏览阅读4.8w次,点赞4次,收藏7次。org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.fkhd.whiteshirt.daos.UserMapper] found for dependency: expected at least 1 bean which qualifies as auto_mybatis mapper接口 为空

VC2015运行库安装失败_vc2015运行库安装失败0x001113f8-程序员宅基地

文章浏览阅读4.1k次。VC2015安装失败,0x80240017-未指定的错误。32位操作系统64位操作系统_vc2015运行库安装失败0x001113f8

响应式布局过时了吗?_响应式网站淘汰-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏3次。响应式布局Responsive design,意在实现不同屏幕分辨率的终端上浏览网页的不同展示方式。通过响应式设计能使网站在手机和平板电脑上有更好的浏览阅读体验。响应式布局不是趋势?我们看到大型电商,直播平台,问答类网站,都会开发一套PC端和一套独立的移动端,比如 某东桌面端 (某东移动端)[https://m.jd.com],还有一些小型网站….响应式设计仅是改善移动体验并没..._响应式网站淘汰