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文件

二、解析本地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文件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是 Android实现向本地写入一个XML文件和解析XML文件 的全部内容, 来源链接: utcz.com/p/242503.html

回到顶部