1. 程式人生 > 程式設計 >Android實現向本地寫入一個XML檔案和解析XML檔案

Android實現向本地寫入一個XML檔案和解析XML檔案

在網路儲存過程中有很多時候會遇到XML檔案解析和使用XML儲存一些資訊,解析XML檔案用的比較多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡寫入一個XML檔案,然後再使用pull解析的方法對檔案進行解析。

一、向SD卡中寫入一個XML檔案:

/**
	 * 向SD卡寫入一個XML檔案
	 * 
	 * @param v
	 */
	public void savexml(View v) {
 
		try {
			File file = new File(Environment.getExternalStorageDirectory(),"persons.xml");
			FileOutputStream fos = new FileOutputStream(file);
			// 獲得一個序列化工具
			XmlSerializer serializer = Xml.newSerializer();
			serializer.setOutput(fos,"utf-8");
			// 設定檔案頭
			serializer.startDocument("utf-8",true);
			serializer.startTag(null,"persons");
			for (int i = 0; i < 10; i++) {
				serializer.startTag(null,"person");
				serializer.attribute(null,"id",String.valueOf(i));
				// 寫姓名
				serializer.startTag(null,"name");
				serializer.text("張三" + i);
				serializer.endTag(null,"name");
				// 寫性別
				serializer.startTag(null,"gender");
				serializer.text("男" + i);
				serializer.endTag(null,"gender");
				// 寫年齡
				serializer.startTag(null,"age");
				serializer.text("1" + i);
				serializer.endTag(null,"age");
 
				serializer.endTag(null,"person");
			}
			serializer.endTag(null,"persons");
			serializer.endDocument();
			fos.close();
			Toast.makeText(MainActivity.this,"寫入成功",0).show();
		} catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(MainActivity.this,"寫入失敗",0).show();
		}
 
	}

1、設定XML檔案儲存的地址,2、獲得一個序列化工具,3、寫XML檔案的頭,4、迴圈寫入資訊。

最後得到的XML檔案

Android實現向本地寫入一個XML檔案和解析XML檔案

二、解析本地XML檔案

/**
	 * 讀取SD卡中的XML檔案,使用pull解析
	 * 
	 * @param v
	 */
	public void readxml(View v) {
 
		try {
			File path = new File(Environment.getExternalStorageDirectory(),"persons.xml");
			FileInputStream fis = new FileInputStream(path);
 
			// 獲得pull解析器物件
			XmlPullParser parser = Xml.newPullParser();
			// 指定解析的檔案和編碼格式
			parser.setInput(fis,"utf-8");
 
			int eventType = parser.getEventType(); // 獲得事件型別
 
			String id = null;
			String name = null;
			String gender = null;
			String age = null;
			while (eventType != XmlPullParser.END_DOCUMENT) {
				String tagName = parser.getName(); // 獲得當前節點的名稱
 
				switch (eventType) {
				case XmlPullParser.START_TAG: // 當前等於開始節點 <person>
					if ("persons".equals(tagName)) { // <persons>
					} else if ("person".equals(tagName)) { // <person id="1">
						id = parser.getAttributeValue(null,"id");
					} else if ("name".equals(tagName)) { // <name>
						name = parser.nextText();
					}else if ("gender".equals(tagName)) { // <age>
						gender = parser.nextText();
					} else if ("age".equals(tagName)) { // <age>
						age = parser.nextText();
					}
					break;
				case XmlPullParser.END_TAG: // </persons>
					if ("person".equals(tagName)) {
						Log.i(TAG,"id---" + id);
						Log.i(TAG,"name---" + name);
						Log.i(TAG,"gender---" + gender);
						Log.i(TAG,"age---" + age);
					}
					break;
				default:
					break;
				}
				eventType = parser.next(); // 獲得下一個事件型別
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			
		}

1、獲取要解析XML檔案的地址,2、獲得pull解析工具,3、根據標籤的不同判斷並儲存資訊。

Android實現向本地寫入一個XML檔案和解析XML檔案

在解析過程中遇到一個問題,就是在解析完了之後,呼叫fis.close()函式時,會報bad file number的錯誤,檢查了很久才發現是這句話的問題。

補充知識:Android 讀取raw下的xml配置檔案

1、獲取資料流

// 讀取配置檔案
InputStream in = context.getResources().openRawResource(R.raw.cfg);

2、解析xml檔案

public class XmlParser<T>{
  public T xmlParser(InputStream xml) throws Exception {
    XmlPullParser pullParse = Xml.newPullParser();
    pullParse.setInput(xml,"UTF-8");
    int event = pullParse.getEventType();
    while (event != XmlPullParser.END_DOCUMENT) {
      switch (event) {

        case XmlPullParser.START_DOCUMENT:
          //檔案開頭
          break;

        case XmlPullParser.START_TAG:
          //標籤開始標誌
          //pullParse.getName() 獲取標籤名
          //pullParse.getAttributeValue(0)獲取標籤的引數
          //pullParse.nextText() 獲取標籤內的值

          break;

        case XmlPullParser.END_TAG:
          //標籤結束標誌
          break;
      }
      event = pullParse.next();//進行下一個標籤的解析

    }
    return T;
  }
}

以上這篇Android實現向本地寫入一個XML檔案和解析XML檔案就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。