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

 

转载于:https://www.cnblogs.com/a-blue/p/3521297.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值