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文件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持好吧啦网。
相关文章: