zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【原】从/dev/null重新打开标准输出
    Go 接口转换的一个例子
    关于软件编译安装的出错处理
    【原】GO 语言常见错误
    HP平台由于变量声明冲突导致程序退出时的core
    动态链接库加载出错:cannot restore segment prot after reloc: Permission denied
    Windows VC++常见问题汇总
    .net:System.Web.Mail vs System.Net.Mail应该用哪个
    网络管理的功能
    Hello World! — 用 Groovy 编写的 Java 程序
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4010553.html
Copyright © 2011-2022 走看看