Android實(shí)現(xiàn)向本地寫入一個(gè)XML文件和解析XML文件
在網(wǎng)絡(luò)存儲過程中有很多時(shí)候會遇到XML文件解析和使用XML保存一些信息,解析XML文件用的比較多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡寫入一個(gè)XML文件,然后再使用pull解析的方法對文件進(jìn)行解析。
一、向SD卡中寫入一個(gè)XML文件:
/** * 向SD卡寫入一個(gè)XML文件 * * @param v */ public void savexml(View v) { try { File file = new File(Environment.getExternalStorageDirectory(), "persons.xml"); FileOutputStream fos = new FileOutputStream(file); // 獲得一個(gè)序列化工具 XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(fos, "utf-8"); // 設(shè)置文件頭 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、設(shè)置XML文件保存的地址,2、獲得一個(gè)序列化工具,3、寫XML文件的頭,4、循環(huán)寫入信息。
最后得到的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(); // 獲得當(dāng)前節(jié)點(diǎn)的名稱 switch (eventType) { case XmlPullParser.START_TAG: // 當(dāng)前等于開始節(jié)點(diǎn) <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(); // 獲得下一個(gè)事件類型 } } catch (Exception e) { e.printStackTrace(); }finally{ }
1、獲取要解析XML文件的地址,2、獲得pull解析工具,3、根據(jù)標(biāo)簽的不同判斷并保存信息。
在解析過程中遇到一個(gè)問題,就是在解析完了之后,調(diào)用fis.close()函數(shù)時(shí),會報(bào)bad file number的錯誤,檢查了很久才發(fā)現(xiàn)是這句話的問題。
補(bǔ)充知識:Android 讀取raw下的xml配置文件
1、獲取數(shù)據(jù)流
// 讀取配置文件
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: //標(biāo)簽開始標(biāo)志 //pullParse.getName() 獲取標(biāo)簽名 //pullParse.getAttributeValue(0)獲取標(biāo)簽的參數(shù) //pullParse.nextText() 獲取標(biāo)簽內(nèi)的值 break; case XmlPullParser.END_TAG: //標(biāo)簽結(jié)束標(biāo)志 break; } event = pullParse.next();//進(jìn)行下一個(gè)標(biāo)簽的解析 } return T; } }
以上這篇Android實(shí)現(xiàn)向本地寫入一個(gè)XML文件和解析XML文件就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android實(shí)現(xiàn)簡單C/S聊天室應(yīng)用
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡單C/S聊天室應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01Android RecyclerView添加搜索過濾器的示例代碼
本篇文章主要介紹了Android RecyclerView添加搜索過濾器的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01Android實(shí)現(xiàn)自定義圓角對話框Dialog的示例代碼
項(xiàng)目中多處用到對話框,本篇文章主要介紹了Android實(shí)現(xiàn)圓角對話框Dialog的示例代碼,有興趣的可以了解一下。2017-03-03Android 嵌套Fragment的使用實(shí)例代碼
本文主要介紹Android Fragment,在這里提供了實(shí)例代碼跟效果圖,希望能幫助有需要的小伙伴2016-07-07ImageView的屬性android:scaleType的作用分析
本篇文章是對ImageView的屬性android:scaleType的作用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Android 中圖片和按鈕按下狀態(tài)變化實(shí)例代碼解析
這篇文章通過實(shí)例代碼給大家總結(jié)了android 中圖片和按鈕按下狀態(tài)變化問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-06-06Android 照片選擇區(qū)域功能實(shí)現(xiàn)示例
這篇文章主要介紹了Android 照片選擇區(qū)域功能實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04