Android -- 解析xml

简单布局                                                                                     

<TextView
        android:id="@+id/tv_weather"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
       />

信息类                                                                                        

private int wendu;
private int wind;
private String type;
private int id;
@Override
public String toString() {
  return "天气信息 [温度=" + wendu + ", 风力=" + wind + "级 , 天气状况=" + type
                + ", 未来第=" + id + "天]";
    }

四个变量,然后有分别set和get。toString函数分别显示出这四个变量出来。

解析xml函数                                                                          

public class XmlReader {
    public static List<XmlInfo> getXml(InputStream is) throws Exception {
        // 获得xml解析器
        XmlPullParser parser = Xml.newPullParser();
        // 初始化解析器
        parser.setInput(is, "utf-8");
        // 解析xml
        int eventType = parser.getEventType();// 第一次被调用的时候 定位在xml开头
        List<XmlInfo> xmlInfos = null;
        XmlInfo xmlInfo = null;
        while (eventType != XmlPullParser.END_DOCUMENT) {//需要不停的让解析器解析下一条
            switch (eventType) {
            case XmlPullParser.START_TAG:
                if("weather".equals(parser.getName()))
                {
                    // 发现开始节点 为weather 创建集合
                    xmlInfos = new ArrayList<XmlInfo>();
                } else if ("day".equals(parser.getName())) {
                    // 发现一个新的日期 对应的天气
                    xmlInfo = new XmlInfo();
                    String id = parser.getAttributeValue(0);
                    xmlInfo.setId(Integer.parseInt(id));
                } else if ("wendu".equals(parser.getName())) {
                    String wendu = parser.nextText();
                    xmlInfo.setWendu(Integer.parseInt(wendu));
                } else if ("wind".equals(parser.getName())) {
                    String wind = parser.nextText();
                    xmlInfo.setWind(Integer.parseInt(wind));
                } else if ("type".equals(parser.getName())) {
                    String type = parser.nextText();
                    xmlInfo.setType(type);
                }
                
                break;
                
            case XmlPullParser.END_TAG:
                if ("day".equals(parser.getName())) {
                    xmlInfos.add(xmlInfo);
                }
                break;

            default:
                break;
            }
            eventType = parser.next();// 控制解析器 解析下一个节点

        }
        is.close();
        return xmlInfos;

    }
}

onCreate中处理                                                                        

TextView tv = (TextView) findViewById(R.id.tv_weather);
        
        StringBuilder sb = new StringBuilder();
        List<XmlInfo> xmlinfos;
        try {
            xmlinfos = XmlReader.getXml(getClassLoader().getResourceAsStream("weather.xml"));
            for(XmlInfo xmlinfo : xmlinfos)
            {
                sb.append(xmlinfo.toString());
                sb.append("\n");
            }
            tv.setText(sb.toString());
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
            Toast.makeText(this, "解析信息失败", 0).show();
        }

我是天王盖地虎的分割线                                                                

源代码:http://pan.baidu.com/s/1dD1Qx01

Xml解析.zip

 

 

 

转载请注明出处:http://www.cnblogs.com/yydcdut

posted @ 2014-06-16 10:27  我爱物联网  阅读(846)  评论(0编辑  收藏  举报
AmazingCounters.com