解析以下的一个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();
- }
- }