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、循環(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(); // 獲得當前節(jié)點的名稱
switch (eventType) {
case XmlPullParser.START_TAG: // 當前等于開始節(jié)點 <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的錯誤,檢查了很久才發(fā)現是這句話的問題。
補充知識: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文件就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Android RecyclerView添加搜索過濾器的示例代碼
本篇文章主要介紹了Android RecyclerView添加搜索過濾器的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
ImageView的屬性android:scaleType的作用分析
本篇文章是對ImageView的屬性android:scaleType的作用進行了詳細的分析介紹,需要的朋友參考下2013-06-06
Android 中圖片和按鈕按下狀態(tài)變化實例代碼解析
這篇文章通過實例代碼給大家總結了android 中圖片和按鈕按下狀態(tài)變化問題,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨腳本之家小編一起學習吧2018-06-06

