• android使用XmlPullParser来解析XML文件


    解析下面的一个XML:

    <?xml version="1.0" encoding="utf-8" ?>
    <rss><sid>77f265bb46de068e78f35afbadec62af</sid><count>3</count><control>0</control>
    <mblog><uid>1195224593</uid><favid>3436952795</favid><mblogid>5xtaJR</mblogid><mblogidnum>3436952795</mblogidnum><mblogtype>0</mblogtype><mlevel>0</mlevel><feedid>5xtaJR</feedid><nick>马艳丽</nick><portrait>http://tp2.sinaimg.cn/1195224593/50/5614100014/0</portrait><vip>1</vip><vipsubtype>0</vipsubtype><member_type>13</member_type><remark></remark><level>2</level><rtnum>11</rtnum><commentnum>25</commentnum><attitudenum>0</attitudenum><attitudeid>0</attitudeid><attitudes_status>0</attitudes_status><attitudes_count>0</attitudes_count><mblogtypename></mblogtypename><visible><type>0</type><list_id>0</list_id></visible><content>婚礼在北海漂亮的北海公园举行…好美好浪漫的地方… </content><pic>http://ss12.sinaimg.cn/wap240/473dae11494344debfc5b</pic><time>1288852274</time><source>彩信</source></mblog></rss>
    

    这样来写解析:

    	public static Object[] getMBlogList(String content) throws HttpException {
    		try {
    			Object[] result = new Object[3];
    			List<MBlog> lst = new ArrayList<MBlog>();
    			result[1] = lst;
    
    			final XmlPullParser parser = Xml.newPullParser();
    			parser.setInput(new StringReader(content));
    			int type;
    			while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
    				switch (type) {
    					<strong>case XmlPullParser.START_TAG:这里開始读取最外层的标签属性</strong>
    						if (parser.getName().equals("count")) {
    							try {
    								result[0] = new Integer(parseText(parser));
    							} catch (Exception e) {
    								result[0] = 0;
    							}
    						} else if (parser.getName().equals("mblog")) {
    							MBlog mb = parseMBlog(parser);
    							if (mb != null)
    								lst.add(mb);
    						} else if (parser.getName().equals("relation")) {
    							result[2] = new Integer(parseText(parser));
    						}
    						break;
    					default:
    						break;
    				}
    			}
    			return result;
    		} catch (NumberFormatException e) {
    			throw new HttpException(e);
    		} catch (XmlPullParserException e) {
    			throw new HttpException(e);
    		} catch (IOException e) {
    			throw new HttpException(e);
    		} catch (ParseException e) {
    			throw new HttpException(e);
    		}
    	}
    	
    	private static String parseText(XmlPullParser parser) throws ParseException {
    		try {
    			int type = parser.next();
    			if (type == XmlPullParser.TEXT) {
    				return replaceEntityRef(parser.getText().trim());
    			} else {
    				return "";
    			}
    		} catch (Exception e) {
    			throw new ParseException(PARSE_ERROR, e);
    		}
    	}
    	
    	public static MBlog parseMBlog(XmlPullParser parser) throws ParseException {
    		<strong>MBlog b = new MBlog();//这里開始读取每一个MBlog对象</strong>
    		try {
    			int type;
    			LOOP: {
    				while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
    					switch (type) {
    						case XmlPullParser.START_TAG:
    							if (parser.getName().equals("uid")) {
    								b.uid = parseText(parser);
    								if (b.uid.equals(""))
    									return null;
    							} else if (parser.getName().equals("favid")) {
    								b.favid = parseText(parser);
    							} else if (parser.getName().equals("mblogid")) {
    								b.mblogid = parseText(parser);
    							} else if (parser.getName().equals("nick")) {
    								String s = parseText(parser);
    								b.nick = s;
    							} else if (parser.getName().equals("portrait")) {
    								b.portrait = parseText(parser);
    							} else if (parser.getName().equals("vip")) {
    								b.vip = (parseText(parser).equals("1")) ? true : false;
    							} else if (parser.getName().equals("content")) {
    								b.content = parseText(parser);
    							} else if (parser.getName().equals("rtrootuid")) {
    								b.rtrootuid = parseText(parser);
    							} else if (parser.getName().equals("rtrootid")) {
    								b.rtrootid = parseText(parser);
    							} else if (parser.getName().equals("rtrootnick")) {
    								String s = parseText(parser);
    								b.rtrootnick = s;
    							} else if (parser.getName().equals("rtrootvip")) {
    								b.rtrootvip = (parseText(parser).equals("1")) ? true : false;
    							} else if (parser.getName().equals("rtreason")) {
    								b.rtreason = parseText(parser);
    							} else if (parser.getName().equals("rtnum")) {
    								b.rtnum = Integer.parseInt(parseText(parser));
    							} else if (parser.getName().equals("commentnum")) {
    								b.commentnum = Integer.parseInt(parseText(parser));
    							} else if (parser.getName().equals("time")) {
    								b.time = new Date(Long.parseLong(parseText(parser)) * 1000);
    							} else if (parser.getName().equals("pic")) {
    								b.pic = parseText(parser);
    							} else if (parser.getName().equals("source")) {
    								b.src = parseText(parser);
    							} else if (parser.getName().equals("longitude")) {
    								b.longitude = parseText(parser);
    							} else if (parser.getName().equals("latitude")) {
    								b.latitude = parseText(parser);
    							}
    							break;
    						case XmlPullParser.END_TAG:
    							if (parser.getName().equals("mblog")) {
    								break LOOP;
    							}
    							break;
    						default:
    							break;
    					}
    				}
    			}
    			return b;
    		} catch (Exception e) {
    			throw new ParseException(PARSE_ERROR, e);
    		}
    	}
    	

    在Activity中这样调用:

    public void parseAssertData() {
    		InputStream is = null;
    		try {
    			is = this.getAssets().open("11.xml", Context.MODE_PRIVATE);
    			int length = is.available();
    			byte[] buffer = new byte[length];
    			is.read(buffer);
    			String temp = new String(buffer);
    
    			try {
    				Object[] array = ParseData.getMBlogList(temp);
    			} catch (HttpException e) {
    				e.printStackTrace();
    			}
    			
    		} catch (IOException ex) {
    			ex.printStackTrace();
    		}
    	}

    代码http://download.csdn.net/detail/baidu_nod/7689299

  • 相关阅读:
    eclipse注释模板__自动生成方法注释
    java HashMap--统计其中有相同value的key的个数
    java synchronized 详解
    进程间通信-共享内存
    辅导-计算机编程方面
    gnu make
    适应c++ 新特性
    tomcat服务器
    springmvc笔记
    Idea使用SVN教程
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4010553.html
Copyright © 2020-2023  润新知