Home > Article > Backend Development > android uses XmlPullParser to parse XML files
Parse the following 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> <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> <source>彩信</source> </mblog> </rss>
Write the parsing like this:
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); } }
Call like this in 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(); } }The above is how Android uses XmlPullParser to parse XML The content of the file, please pay attention to the PHP Chinese website (www.php.cn) for more related content!