Android實現向本地寫入一個XML檔案和解析XML檔案
阿新 • • 發佈:2020-03-24
在網路儲存過程中有很多時候會遇到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檔案
二、解析本地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、根據標籤的不同判斷並儲存資訊。
在解析過程中遇到一個問題,就是在解析完了之後,呼叫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檔案就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。