zoukankan      html  css  js  c++  java
  • Xml解析之Pull

    解析Xml有三种方式可选,sax ,dom ,pull 。  Dom在android上性能不是很少,在android上首选sax和pull。

           前段时间写了个Android天气预报的Demo,涉及到了pull解析Xml,pull的解析算是比较简单易用,

    下面总结一下自己用pull解析xml的学习经验。

             附上天气预报deme代码:

    http://www.eoeandroid.com/forum.php?mod=viewthread&tid=248543&page=1&extra=#pid2291325

             获取省份信息:

             http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince?

             通过上面这个地址,我们可以用HttpGet去可以获取到省份Xml文本内容,获取到Xml文本步骤就省略了,

    得到Xml内容如下:

             <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/">
    
    <string>直辖市</string>
    
    <string>特别行政区</string>
    
    <string>黑龙江</string>
    
    <string>吉林</string>
    
    <string>辽宁</string>
    
    <string>内蒙古</string>
    
    <string>河北</string>
    
    <string>河南</string>
    
    <string>山东</string>
    
    <string>山西</string>
    
    <string>江苏</string>
    
    <string>安徽</string>
    
    <string>陕西</string>
    
    <string>宁夏</string>
    
    <string>甘肃</string>
    
    <string>青海</string>
    
    </ArrayOfString>

            

             1.首先用到XmL的 静态方法去获取一个解析器XmlPullParser实例:

    XmlPullParser xmlPullParser = Xml.newPullParser();

           

              2.设置输入流

    xmlPullParser.setInput(inStream, "UTF-8");

              这里的输入流inStream就是获取的Xml文件的输入流。

             3,获取事件类型

     int eventCode = xmlPullParser.getEventType();

                这里的事件类型一共有以下几种比较常用到:

             

           XmlPullParser.START_DOCUMENT// 文档开始
    
               XmlPullParser.START_TAG// 标签开始.
    
                XmlPullParser.END_TAG// 标签结束
    
                XmlPullParser.END_DOCUMENT// 文档结束

              逻辑思路:

    利用While语句,对文档进行遍历,每个While中,用switch去判断事件类型,进行相应处理,处理中利用

     
    
    String name = xmlPullParser.getName();

     判断标签的详细类型,再进行更详细的处理,每次循环结束用下面语句把游标移动到下一个标签上,进行下次while循环

    eventCode = xmlPullParser.next();

     直到

    eventCode = XmlPullParser.END_DOCUMENT

     表明文档已经结束,则解析完成。

    具体代码:

     
    
     public static ArrayList<String> getProvince(InputStream inStream,
            int type) {
        ArrayList<String> data = new ArrayList<String>();
        XmlPullParser xmlPullParser = Xml.newPullParser();
        try {
            xmlPullParser.setInput(inStream, "UTF-8");
            int eventCode = xmlPullParser.getEventType();
            while (eventCode != XmlPullParser.END_DOCUMENT) {
            String name = xmlPullParser.getName();
            switch (eventCode) {
            case XmlPullParser.START_DOCUMENT:// 文档开始
    
                break;
            case XmlPullParser.START_TAG:// 元素开始.
                if (name.equalsIgnoreCase("string")) {
                if(type ==2) data.add(xmlPullParser.nextText() .split("\\(")[0].trim().toString());
                else {
                    data.add(xmlPullParser.nextText() );
                }
                }
                break;
            case XmlPullParser.END_TAG:// 元素结束
    
                break;
            case XmlPullParser.END_DOCUMENT:// 文档结束
    
                break;
    
            default:
                break;
            }
            eventCode = xmlPullParser.next();
            }
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
     
  • 相关阅读:
    NET基础课--XML基础
    NET基础课--WinForm开发推荐3
    NET基础课--JIT编译器如何工作1
    NET基础课--异常处理X
    NSURLRequest POST方式请求服务器示例
    iOS开发网络篇—NSURLConnection基本使用
    AFNetworking封装思路简析
    IOS NSURLRequest 设置 Header
    AFNetworking3.0为何弃用了NSURLConnection
    iOS开发多线程篇—GCD介绍
  • 原文地址:https://www.cnblogs.com/chenchuangfeng/p/3130332.html
Copyright © 2011-2022 走看看