Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android下使用pull解析器生成XML文件、讀取XML文件

Android下使用pull解析器生成XML文件、讀取XML文件

編輯:關於Android編程

 

Android下使用Pull解析器
	1,Pull解析器的運行方式與SAX解析器相似。它提供了類似的事件,如:開始元素和結束元素事件。
	2,使用parser.next()可以進入下一個元素並觸發相應事件。
	3,事件將作為一個int數值被發送,因此可以使用一個switch對相應的事件進行處理。
	4,當元素開始解析時,調用parser.nextText()方法可以獲取下一個Text類型節點的值。
	5,相關API:
		獲得當前節點事件類型:parser.getEventType();
		獲得下一節點事件類型:parser.next();
		獲得標簽屬性值:	  parser.getAttributeValue();
		獲得標簽後面文本內容:parser.nextText();
	
	例子:
		
		
			
				allen
				36
			
			
				james
				25
			
		
	
	// 使用Pull解析器生成XML文件,並寫到本地
	private void writeXmlToLocal() {
		List personList = getPersonList();
		
		// 獲得序列化對象
		XmlSerializer serializer = Xml.newSerializer();
//		XmlSerializer serializer = XmlPullParserFactory.newInstance().newSerializer();
		
		try {
			File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");
			FileOutputStream fos = new FileOutputStream(path);
			
			// 指定序列化對象輸出的位置和編碼
			serializer.setOutput(fos, "utf-8");
			
						// 寫開始 
			serializer.startDocument("utf-8", true);		
			
			serializer.startTag(null, "persons");			// 
			
			for (Person person : personList) {
			
				// 開始寫person
				serializer.startTag(null, "person");		// 
				serializer.attribute(null, "id", String.valueOf(person.getId()));
				
				// 寫person的name
				serializer.startTag(null, "name");			// 
				serializer.text(person.getName());
				serializer.endTag(null, "name");			// 
				
				// 寫person的age
				serializer.startTag(null, "age");			// 
				serializer.text(String.valueOf(person.getAge()));
				serializer.endTag(null, "age");				// 
				
				serializer.endTag(null, "person");			// 
			}
			
			serializer.endTag(null, "persons");				// 
			
			serializer.endDocument();						// 結束
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


	// 使用Pull解析器讀取本地的XML文件
	private List parserXmlFromLocal() {
		try {
			File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");
			FileInputStream fis = new FileInputStream(path);
			
			// 獲得pull解析器對象
			XmlPullParser parser = Xml.newPullParser();
//			XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser(); 
			
			// 指定解析的文件和編碼格式
			parser.setInput(fis, "utf-8");
			
			// 獲得事件類型
			int eventType = parser.getEventType();
			
			List personList = null;
			Person person = null;
			String id;
			while(eventType != XmlPullParser.END_DOCUMENT) {
			
				// 獲得當前節點的名稱
				String tagName = parser.getName();
				
				switch (eventType) {
				case XmlPullParser.START_TAG: 				// 當前等於開始節點  
					if("persons".equals(tagName)) {			// 
						personList = new ArrayList();
					} else if("person".equals(tagName)) { 	// 
						person = new Person();
						id = parser.getAttributeValue(null, "id");
						person.setId(Integer.valueOf(id));
					} else if("name".equals(tagName)) { 	// 
						person.setName(parser.nextText());
					} else if("age".equals(tagName)) { 		// 
						person.setAge(Integer.parseInt(parser.nextText()));
					}
					break;
				case XmlPullParser.END_TAG:		// 
					if("person".equals(tagName)) {
						// 需要把上面設置好值的person對象添加到集合中
						personList.add(person);
					}
					break;
				default:
					break;
				}
				// 獲得下一個事件類型
				eventType = parser.next();		
			}
			return personList;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}
	
	
	

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved