Android實(shí)現(xiàn)向本地寫(xiě)入一個(gè)XML文件和解析XML文件
在網(wǎng)絡(luò)存儲(chǔ)過(guò)程中有很多時(shí)候會(huì)遇到XML文件解析和使用XML保存一些信息,解析XML文件用的比較多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡寫(xiě)入一個(gè)XML文件,然后再使用pull解析的方法對(duì)文件進(jìn)行解析。
一、向SD卡中寫(xiě)入一個(gè)XML文件:
/**
* 向SD卡寫(xiě)入一個(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));
// 寫(xiě)姓名
serializer.startTag(null, "name");
serializer.text("張三" + i);
serializer.endTag(null, "name");
// 寫(xiě)性別
serializer.startTag(null, "gender");
serializer.text("男" + i);
serializer.endTag(null, "gender");
// 寫(xiě)年齡
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, "寫(xiě)入成功", 0).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "寫(xiě)入失敗", 0).show();
}
}
1、設(shè)置XML文件保存的地址,2、獲得一個(gè)序列化工具,3、寫(xiě)XML文件的頭,4、循環(huán)寫(xiě)入信息。
最后得到的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解析器對(duì)象
XmlPullParser parser = Xml.newPullParser();
// 指定解析的文件和編碼格式
parser.setInput(fis, "utf-8");
int eventType = parser.getEventType(); // 獲得事件類(lèi)型
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)的名稱(chēng)
switch (eventType) {
case XmlPullParser.START_TAG: // 當(dāng)前等于開(kāi)始節(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è)事件類(lèi)型
}
} catch (Exception e) {
e.printStackTrace();
}finally{
}
1、獲取要解析XML文件的地址,2、獲得pull解析工具,3、根據(jù)標(biāo)簽的不同判斷并保存信息。

在解析過(guò)程中遇到一個(gè)問(wèn)題,就是在解析完了之后,調(diào)用fis.close()函數(shù)時(shí),會(huì)報(bào)bad file number的錯(cuò)誤,檢查了很久才發(fā)現(xiàn)是這句話的問(wèn)題。
補(bǔ)充知識(shí):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:
//文件開(kāi)頭
break;
case XmlPullParser.START_TAG:
//標(biāo)簽開(kāi)始標(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)向本地寫(xiě)入一個(gè)XML文件和解析XML文件就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android GridView不改變背景色實(shí)現(xiàn)網(wǎng)格線效果
這篇文章主要介紹了Android GridView不改變背景色實(shí)現(xiàn)網(wǎng)格線效果,需要的朋友可以參考下2016-03-03
深入Android Handler,MessageQueue與Looper關(guān)系
這篇文章主要介紹了深入Android Handler,MessageQueue與Looper關(guān)系,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
解決Android7.0更新后無(wú)法安裝的問(wèn)題
項(xiàng)目中發(fā)現(xiàn)在自動(dòng)更新功能的時(shí)候,下載好了apk的文件后在android7.0系統(tǒng)中不能自動(dòng)跳到安裝界面,后來(lái)搜索了一番解決了問(wèn)題,但感覺(jué)沒(méi)有描述清楚,所以補(bǔ)充一下。2017-12-12
android?scrollview頂部漸漸消失實(shí)現(xiàn)實(shí)例詳解
這篇文章主要為大家介紹了android?scrollview頂部漸漸消失實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Android ListView列表實(shí)現(xiàn)倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了Android ListView列表實(shí)現(xiàn)倒計(jì)時(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
Android Studio 3.6 layout文件text模式切換問(wèn)題
這篇文章主要介紹了Android Studio 3.6 layout文件text模式切換問(wèn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
詳解如何在Flutter中獲取設(shè)備標(biāo)識(shí)符
這篇文章主要為大家介紹了幾種通過(guò)Flutter讀取設(shè)備信息的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下2022-04-04
Activity實(shí)例詳解之啟動(dòng)activity并返回結(jié)果
這篇文章主要介紹了Activity實(shí)例詳解之啟動(dòng)activity并返回結(jié)果 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
Android 操作系統(tǒng)獲取Root權(quán)限 原理詳細(xì)解析
許多機(jī)友新購(gòu)來(lái)的Android機(jī)器沒(méi)有破解過(guò)Root權(quán)限,無(wú)法使用一些需要高權(quán)限的軟件,以及進(jìn)行一些高權(quán)限的操作,其實(shí)破解手機(jī)Root權(quán)限是比較簡(jiǎn)單及安全的,破解Root權(quán)限的原理就是在手機(jī)的/system/bin/或/system/xbin/目錄下放置一個(gè)可執(zhí)行文件“su”2013-10-10
Kotlin的Collection與Sequence操作異同點(diǎn)詳解
這篇文章主要介紹了Kotlin的Collection與Sequence操作異同點(diǎn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10

