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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。