zoukankan      html  css  js  c++  java
  • xml文件解析(使用解析器)

    一.Xml解析,解析xml并封装到list中的javabean中

    OM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理

    1.获取xml解析器

            XmlPullParser xpp = Xml.newPullParser();

    2.设置解析器参数

        xpp.setInput(in, "utf-8");//in为输入流

    3.获取事件类型

    int type = xpp.getEventType();

    4.不断向下解析,一行一行解析

            while(type != XmlPullParser.END_DOCUMENT){
                    switch(type){
                    
                    case XmlPullParser.START_TAG://解析开始标签
                        //具体判断是哪个开始标签
                        if("weather".equals(xpp.getName())){
                            weatherlist = new ArrayList<Channel>();
                        }else if("channel".equals(xpp.getName())){
                            ch = new Channel();
                            String id = xpp.getAttributeValue(0);
                            ch.setId(id);
                        }else if("city".equals(xpp.getName())){
                            String city = xpp.nextText();
                            ch.setCity(city);
                        }else if("temp".equals(xpp.getName())){
                            String temp = xpp.nextText();
                            ch.setTemp(temp);
                        }else if("wind".equals(xpp.getName())){
                            String wind = xpp.nextText();
                            ch.setWind(wind);
                        }else if("pm2.5".equals(xpp.getName())){
                            String pm250 = xpp.nextText();
                            ch.setPm250(pm250);
                        }
                        break;
                    case XmlPullParser.END_TAG://解析结束标签
                        //判断要解析的结束标签
                        if("channel".equals(xpp.getName())){
                            //把ch对象添加到集合
                            weatherlist.add(ch);
                        }
                        break;        
    
                    }
                    type = xpp.next();
                }

    5.对应的要解析的文件:

    <?xml version="1.0" encoding="utf-8"?>
    <weather>
        <channel id="1">
            <city>北京</city>
            <temp>16℃</temp>
            <wind>4</wind>
            <pm2.5>300</pm2.5>
        </channel>
        
        <channel id="2">
            <city>上海</city>
            <temp>20℃</temp>
            <wind>5</wind>
            <pm2.5>200</pm2.5>
        </channel>
        
        <channel id="3">
            <city>广州</city>
            <temp>25℃</temp>
            <wind>3</wind>
            <pm2.5>100</pm2.5>
        </channel>
        
        <channel id="4">
            <city>深圳</city>
            <temp>27℃</temp>
            <wind>6</wind>
            <pm2.5>150</pm2.5>
        </channel>
    
    </weather>

    6.对应的JAVABEAN代码

    package com.hui.xmlparse;
    
    
    
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.xmlpull.v1.XmlPullParser;
    
    
    import android.util.Xml;
    
    public class ParserXml {
        
         public static List<Channel> weatherlist = null;
        public static Channel ch = null;
    
        public static List <Channel> weatherParser(InputStream in) throws Exception {
                //获取xml解析器
                XmlPullParser xpp = Xml.newPullParser();
                //设置解析器参数
                xpp.setInput(in, "utf-8");
                //获取事件类型
                int type = xpp.getEventType();
                //不断向下解析
                while(type != XmlPullParser.END_DOCUMENT){
                    switch(type){
                    
                    case XmlPullParser.START_TAG://解析开始标签
                        //具体判断是哪个开始标签
                        if("weather".equals(xpp.getName())){
                            weatherlist = new ArrayList<Channel>();
                        }else if("channel".equals(xpp.getName())){
                            ch = new Channel();
                            String id = xpp.getAttributeValue(0);
                            ch.setId(id);
                        }else if("city".equals(xpp.getName())){
                            String city = xpp.nextText();
                            ch.setCity(city);
                        }else if("temp".equals(xpp.getName())){
                            String temp = xpp.nextText();
                            ch.setTemp(temp);
                        }else if("wind".equals(xpp.getName())){
                            String wind = xpp.nextText();
                            ch.setWind(wind);
                        }else if("pm2.5".equals(xpp.getName())){
                            String pm250 = xpp.nextText();
                            ch.setPm250(pm250);
                        }
                        break;
                    case XmlPullParser.END_TAG://解析结束标签
                        //判断要解析的结束标签
                        if("channel".equals(xpp.getName())){
                            //把ch对象添加到集合
                            weatherlist.add(ch);
                        }
                        break;        
    
                    }
                    type = xpp.next();
                }
                
                return weatherlist;
            }
        
    
            
    }
    需要程序源码的可以加我微信x241602私聊。
  • 相关阅读:
    (二)全局属性
    (十二)this关键字
    (十一)构造方法的重载和成员方法的重载
    (十)foreac遍历、break和countinue以及标签和switch循环
    java集合
    关于java赋值操作的原子性问题
    spring list map set
    apache benchmark
    为什么java web项目中要使用spring
    spring IOC
  • 原文地址:https://www.cnblogs.com/huipengbo/p/7017141.html
Copyright © 2011-2022 走看看