在网络存储过程中有很多时候会遇到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文件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持自学编程网。