Android向本地写入一个XML文件和解析XML文件

转载https://blog.csdn.net/chenfengdejuanlian/article/details/47060413

在网络存储过程中有很多时候会遇到XML文件解析和使用XML保存一些信息,解析XML文件用的比较多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡写入一个XML文件,然后再使用pull解析的方法对文件进行解析。

一、向SD卡中写入一个XML文件:

[java]  view plain  copy
  1. /** 
  2.      * 向SD卡写入一个XML文件 
  3.      *  
  4.      * @param v 
  5.      */  
  6.     public void savexml(View v) {  
  7.   
  8.         try {  
  9.             File file = new File(Environment.getExternalStorageDirectory(),  
  10.                     "persons.xml");  
  11.             FileOutputStream fos = new FileOutputStream(file);  
  12.             // 获得一个序列化工具  
  13.             XmlSerializer serializer = Xml.newSerializer();  
  14.             serializer.setOutput(fos, "utf-8");  
  15.             // 设置文件头  
  16.             serializer.startDocument("utf-8"true);  
  17.             serializer.startTag(null"persons");  
  18.             for (int i = 0; i < 10; i++) {  
  19.                 serializer.startTag(null"person");  
  20.                 serializer.attribute(null"id", String.valueOf(i));  
  21.                 // 写姓名  
  22.                 serializer.startTag(null"name");  
  23.                 serializer.text("张三" + i);  
  24.                 serializer.endTag(null"name");  
  25.                 // 写性别  
  26.                 serializer.startTag(null"gender");  
  27.                 serializer.text("男" + i);  
  28.                 serializer.endTag(null"gender");  
  29.                 // 写年龄  
  30.                 serializer.startTag(null"age");  
  31.                 serializer.text("1" + i);  
  32.                 serializer.endTag(null"age");  
  33.   
  34.                 serializer.endTag(null"person");  
  35.             }  
  36.             serializer.endTag(null"persons");  
  37.             serializer.endDocument();  
  38.             fos.close();  
  39.             Toast.makeText(MainActivity.this"写入成功"0).show();  
  40.         } catch (Exception e) {  
  41.             e.printStackTrace();  
  42.             Toast.makeText(MainActivity.this"写入失败"0).show();  
  43.         }  
  44.   
  45.     }  
1、设置XML文件保存的地址,2、获得一个序列化工具,3、写XML文件的头,4、循环写入信息。

最后得到的XML文件


二、解析本地XML文件

[java]  view plain  copy
  1. /** 
  2.      * 读取SD卡中的XML文件,使用pull解析 
  3.      *  
  4.      * @param v 
  5.      */  
  6.     public void readxml(View v) {  
  7.   
  8.         try {  
  9.             File path = new File(Environment.getExternalStorageDirectory(),  
  10.                     "persons.xml");  
  11.             FileInputStream fis = new FileInputStream(path);  
  12.   
  13.             // 获得pull解析器对象  
  14.             XmlPullParser parser = Xml.newPullParser();  
  15.             // 指定解析的文件和编码格式  
  16.             parser.setInput(fis, "utf-8");  
  17.   
  18.             int eventType = parser.getEventType(); // 获得事件类型  
  19.   
  20.             String id = null;  
  21.             String name = null;  
  22.             String gender = null;  
  23.             String age = null;  
  24.             while (eventType != XmlPullParser.END_DOCUMENT) {  
  25.                 String tagName = parser.getName(); // 获得当前节点的名称  
  26.   
  27.                 switch (eventType) {  
  28.                 case XmlPullParser.START_TAG: // 当前等于开始节点 <person>  
  29.                     if ("persons".equals(tagName)) { // <persons>  
  30.                     } else if ("person".equals(tagName)) { // <person id="1">  
  31.                         id = parser.getAttributeValue(null"id");  
  32.                     } else if ("name".equals(tagName)) { // <name>  
  33.                         name = parser.nextText();  
  34.                     }else if ("gender".equals(tagName)) { // <age>  
  35.                         gender = parser.nextText();  
  36.                     } else if ("age".equals(tagName)) { // <age>  
  37.                         age = parser.nextText();  
  38.                     }  
  39.                     break;  
  40.                 case XmlPullParser.END_TAG: // </persons>  
  41.                     if ("person".equals(tagName)) {  
  42.                         Log.i(TAG, "id---" + id);  
  43.                         Log.i(TAG, "name---" + name);  
  44.                         Log.i(TAG, "gender---" + gender);  
  45.                         Log.i(TAG, "age---" + age);  
  46.                     }  
  47.                     break;  
  48.                 default:  
  49.                     break;  
  50.                 }  
  51.                 eventType = parser.next(); // 获得下一个事件类型  
  52.             }  
  53.         } catch (Exception e) {  
  54.             e.printStackTrace();  
  55.         }finally{  
  56.               
  57.         }  
1、获取要解析XML文件的地址,2、获得pull解析工具,3、根据标签的不同判断并保存信息。


在解析过程中遇到一个问题,就是在解析完了之后,调用fis.close()函数时,会报bad file number的错误,检查了很久才发现是这句话的问题。

猜你喜欢

转载自blog.csdn.net/sinat_17775997/article/details/80692225