Android-->XmlPullParser

 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 }
XmlPullParser

 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();读取下一条元素。

 

你可能感兴趣的:(android)