android使用XmlPullParser來解析XML檔案
解析以下的一個XML:
77f265bb46de068e78f35afbadec62af30119522459334369527955xtaJR3436952795005xtaJR馬豔麗http://tp2.sinaimg.cn/1195224593/50/5614100014/0101321125000000婚禮在北海美麗的北海公園舉行…好美好浪漫的地方… http://ss12.sinaimg.cn/wap240/473dae11494344debfc5b1288852274多媒體訊息
這樣來寫解析:
public static Object[] getMBlogList(String content) throws HttpException {try {Object[] result = new Object[3];List lst = new ArrayList();result[1] = lst;final XmlPullParser parser = Xml.newPullParser();parser.setInput(new StringReader(content));int type;while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {switch (type) {case XmlPullParser.START_TAG:這裡開始讀取最外層的標籤屬性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 {MBlog b = new MBlog();//這裡開始讀取每個MBlog對象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();}}