安卓中的XML解析

pull解析

public static List<Newslist> getList(String xmlStr) {// 解析XML文件的方法,返回Newslist對象的集合
		List<Newslist> list = null;
		try {
			// XML解析器工廠實例
			XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
			// 獲得解析器對象
			XmlPullParser parser = factory.newPullParser();

			Reader reader = new StringReader(xmlStr);// 讀取字符串
			parser.setInput(reader);// 解析器解析讀取的數據

			Newslist newslist = null;
			int type = parser.getEventType();// 獲得解析的狀態
			int i = 0;//判斷解析的標籤名的變量

			while (type != XmlPullParser.END_DOCUMENT) {

				switch (type) {

				case XmlPullParser.START_DOCUMENT:// 文檔開始
					list = new ArrayList<Newslist>();// 創建集合
					break;
				case XmlPullParser.START_TAG:// 標籤開始(標籤裏面如果有值,可以在這裏面取)

					String str = parser.getName();

					if ("news".equals(str)) {
						// 創建對象,並且給id屬性賦值          拿到標籤裏面的第一個屬性的值(標籤裏面的值)
						newslist = new Newslist(Integer.parseInt(parser.getAttributeValue(0)));
					}
					if ("title".equals(str)) {
						i = 1;
					}
					if ("timelength".equals(str)) {
						i = 2;
					}

					break;

				case XmlPullParser.TEXT:// 標籤之間的文本(標籤之間有值需要在這裏取值)
					if (i == 1) {
						newslist.setTitle(parser.getText());
					}
					if (i == 2) {
						newslist.setTimelength((Integer.parseInt(parser.getText())));
					}

					i=0;
					break;

				case XmlPullParser.END_TAG:// 標籤結束
					if ("news".equals(parser.getName())) {
						list.add(newslist);// 添加到集合
					}

					break;

				default:
					break;
				}

				parser.next();// 進行下一個標籤
				type = parser.getEventType();

			}

			return list;// 返回集合

		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章