1 public static void save() 2 throws Exception { 3 //获取文件目录路径 一般是应用层目录路径。storage/emulated/0 4 String filename = Environment.getExternalStorageDirectory()+File.separator+"xx.xml"; 5 File file = new File(filename); 6 //创建一个新文件。 7 file.createNewFile(); 8 Log.e(TAG, filename); 9 10 FileOutputStream fos = new FileOutputStream(filename); 11 12 13 XmlSerializer serializer = Xml.newSerializer(); 14 // 设置输出流设置编码 15 serializer.setOutput(fos, "UTF-8"); // 16 serializer.startDocument("UTF-8", true);//设置编码 17 serializer.startTag(null, "persons"); //android规定一个xml只能有一个根节点,这个 TAG就是一个根节点 。 18 int count = 0; 19 for(int x=0;x<10;x++) 20 { 21 /** 22 * 有开有关,一定要要求闭合, 23 * 1:获取XmlSerializer实例,然后设置文件输出流,编码等。 24 * 2: 设置Dcoument编码。第二个参数,是否是独立的根?应该是。。 25 */ 26 serializer.startTag(null,"person");//1 27 serializer.attribute(null, "id",String.valueOf(count) );//attribute设置属性, 28 serializer.startTag(null, "name"); //11 29 serializer.text("zhangsan"+String.valueOf(count));//设置TAG中间内容。 30 serializer.endTag(null, "name"); //11 31 serializer.startTag(null, "age");//12 32 serializer.text(String.valueOf(count)); 33 serializer.endTag(null, "age");//12 34 serializer.endTag(null, "person");//1 35 count++; 36 } 37 serializer.endTag(null, "persons"); 38 serializer.endDocument(); 39 fos.flush();//刷新进文件 40 fos.close();//关闭流 41 42 }
上面是 XmlSerializer 制作xml的
1 package com.maitewang.internetdemo.demo; 2 3 import java.io.InputStream; 4 import java.util.ArrayList; 5 import java.util.List; 6 import org.xmlpull.v1.XmlPullParser; 7 import org.xmlpull.v1.XmlPullParserFactory; 8 9 import android.util.Xml; 10 11 public class XmlDemo { 12 public static List<Person> getPerson(InputStream is) throws Exception { 13 Person person = null; 14 List<Person> persons = null; 15 // 两种方法获取对象,其实哪种都一样.. 16 // 第一种 17 XmlPullParser pullParser = Xml.newPullParser(); 18 // 第二种 生成工厂 然后工厂获取. 19 XmlPullParserFactory xppf = XmlPullParserFactory.newInstance(); 20 XmlPullParser pullParser1 = xppf.newPullParser(); 21 // 几种事件类型 22 // XmlPullParser.START_DOCUMENT(开始解析) 23 // XmlPUllParser.START_TAG(开始元素) 24 // XmlPullParser.TEXT(解析文本): 25 // XmlPullParser.END_TAG(结束元素); 26 // XmlPullParser.END_DOCUMENT(结束解析) 事件结束 每一种都与之对应. 27 // 解析中 元素又有属性.属性该怎么解析? 取出元素 文本. 28 29 // 2:设置要解析的流,编码 30 pullParser.setInput(is, "UTF-8"); 31 // 3:获取编码事件 32 int event = pullParser.getEventType(); 33 // 4:中间开始判断事件 34 while (event != XmlPullParser.END_DOCUMENT) { 35 switch (event) { 36 case XmlPullParser.START_DOCUMENT: 37 // 判断是否文档开头. 38 // 一般这个时候开始创建对象准备分解文档 39 persons = new ArrayList<Person>(); 40 break; 41 case XmlPullParser.START_TAG: 42 // 开始进入元素了 43 // pullParser.getName();获取元素名字 也就是<person></person> 这个 44 if ("person".equals(pullParser.getName())) { 45 46 // 取出属性元素id为0的值,方法:pullParser.getAttributeValue(int index); 47 int id = new Integer(pullParser.getAttributeValue(0)); 48 person = new Person(); 49 person.setId(id); 50 } 51 if (person == null) { 52 if ("name".equals(pullParser.getName())) { 53 // 方法名称也出来了.pullParser.nextText();获取元素值 54 person.setName(pullParser.nextText()); 55 } 56 if ("age".equals(pullParser.getName())) { 57 person.setAge(pullParser.nextText()); 58 } 59 } 60 case XmlPullParser.END_TAG: 61 if ("person".equals(pullParser.getName())) { 62 persons.add(person); 63 person = null; 64 } 65 break; 66 } 67 // 方法名称也出来了,next开始读取下一条元素. 68 event = pullParser.next(); 69 70 } 71 72 return persons; 73 74 } 75 }
1:实例华XmlPullParser对象,2种方式:
1.1:Xml.newPullParser();
1.2: 获取工厂,然后从工厂里面生产
XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();
XmlPullParser xpp = xppf.newPullParser();
2:因为pull解析是根据事件来的,所以需要判断事件。
// 几种事件类型
// XmlPullParser.START_DOCUMENT(开始解析)
// XmlPUllParser.START_TAG(开始元素)
// XmlPullParser.TEXT(解析文本):
// XmlPullParser.END_TAG(结束元素);
// XmlPullParser.END_DOCUMENT(结束解析) 事件结束 每一种都与之对应.
3:Method:
pullParser.getName();获取元素名字
取出属性元素id为0的值,方法:pullParser.getAttributeValue(int index); AttriBute 元素,根据这一系列操作。
pullParser.nextText(); 获取元素内容。
pullParser.next();读取下一条元素。