转载https://blog.csdn.net/chenfengdejuanlian/article/details/47060413
在网络存储过程中有很多时候会遇到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();
- }
- }
最后得到的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{
- }
在解析过程中遇到一个问题,就是在解析完了之后,调用fis.close()函数时,会报bad file number的错误,检查了很久才发现是这句话的问题。