android xml操作

 

  1 import java.io.FileInputStream;
  2 import java.io.FileOutputStream;
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import org.xmlpull.v1.XmlPullParser;
  7 import org.xmlpull.v1.XmlSerializer;
  8 
  9 import android.util.Log;
 10 import android.util.Xml;
 11 
 12 import com.itheima27.xmlparserserializer.entities.Person;
 13 
 14 public class XmlUtils {
 15 
 16     private static final String TAG = "XmlUtils";
 17 
 18     /**
 19      * 把数据以xml形式写到本地
 20      */
 21     public void writeToLocal() throws Exception {
 22     
 23         List<Person> personList = new ArrayList<Person>();
 24         for (int i = 0; i < 30; i++) {
 25             personList.add(new Person(i, "王" + i, 20 + i));
 26         }
 27         
 28         XmlSerializer serializer = Xml.newSerializer();        // 创建Xmlserializer的对象
 29         // 指定序列化对象输出的流
 30         FileOutputStream fos = new FileOutputStream("/mnt/sdcard/person.xml");
 31         serializer.setOutput(fos, "utf-8");
 32         
 33         serializer.startDocument("utf-8", true);    // 写xml头
 34         
 35         serializer.startTag(null, "persons");    // 开始的根节点
 36         
 37         for (Person person : personList) {
 38             serializer.startTag(null, "person");
 39             serializer.attribute(null, "id", String.valueOf(person.getId()));
 40             
 41             // 写人的姓名
 42             serializer.startTag(null, "name");
 43             serializer.text(person.getName());
 44             serializer.endTag(null, "name");
 45             
 46             // 写人的年龄
 47             serializer.startTag(null, "age");
 48             serializer.text(String.valueOf(person.getAge()));
 49             serializer.endTag(null, "age");
 50             
 51             serializer.endTag(null, "person");
 52         }
 53         
 54         serializer.endTag(null, "persons");        // 结束的根节点
 55         
 56         serializer.endDocument();    // 标记xml输出完毕
 57     }
 58     
 59     /**
 60      * 从本地文件解析xml数据
 61      */
 62     public void parserXmlFromLocal() throws Exception {
 63         // 创建Pull解析器对象
 64         XmlPullParser parser = Xml.newPullParser();
 65         // 指定解析的文件
 66         FileInputStream fis = new FileInputStream("/mnt/sdcard/person.xml");
 67         parser.setInput(fis, "UTF-8");
 68         
 69         int eventType = parser.getEventType();        // 获得解析器的第一个事件类型 
 70         
 71         List<Person> personList = null;
 72         Person person = null;
 73         String name;
 74         
 75         while(eventType != XmlPullParser.END_DOCUMENT) {        // 如果事件类型不等于结束的类型, 继续循环
 76             String tagName = parser.getName();        // 获得当前节点的名称
 77 
 78             // 解析数据
 79             switch (eventType) {
 80             case XmlPullParser.START_TAG:        // 代表开始节点 <persons>
 81                 
 82                 if("persons".equals(tagName)) {
 83                     // 初始化集合
 84                     personList = new ArrayList<Person>();
 85                 } else if("person".equals(tagName)) {
 86                     person = new Person();
 87                     person.setId(Integer.valueOf(parser.getAttributeValue(null, "id")));
 88                 } else if("name".equals(tagName)) {
 89                     name = parser.nextText();        // 当前是<name> 节点 nextText是取<name> 后边的值
 90                     person.setName(name);
 91                 } else if("age".equals(tagName)) {
 92                     person.setAge(Integer.parseInt(parser.nextText()));
 93                 }
 94                 break;
 95             case XmlPullParser.END_TAG:        // 代表结束节点 </person>
 96                 if("person".equals(tagName)) {        // 当前是</person>
 97                     // 把上面person的对象添加到集合中
 98                     personList.add(person);
 99                 }
100                 break;
101             default:
102                 break;
103             }
104             
105             eventType = parser.next();        // 赋值下一个事件类型
106         }
107         
108         
109         if(personList != null) {
110             for (Person p : personList) {
111                 Log.i(TAG, p.toString());
112             }
113         }
114     }
115 }

 

你可能感兴趣的:(android)