Android入门:Pull解析XML
2012-06-25 20:52
302 查看
一、Pull解析器介绍
pull解析类似于SAX\DOM,都是用来解析XML的方法;二、使用Pull解析器读取XML数据
模板代码如下:XmlPullParser parser = Xml.newPullParser(); //创建一个PULL解析器 parser.setInput(in,"UTF-8"); //读取的编码为UTF-8 int event = parser.getEventType(); //开始解析时调用 while(event!=XmlPullParser.END_DOCUMENT){ //parser.getName(); //获得当前指向的标签的标签名 //parser.getAttributeValue(0); //获得当前指向的标签的第1个属性值 //parser.nextText(); //获得当前标签的标签值 switch(event){ case XmlPullParser.START_DOCUMENT: //如果指向的是START_DOCUMENT //处理 break; case XmlPullParser.START_TAG: //如果指向的是START_TAG //处理 break; case XmlPullParser.END_TAG: //如果指向的是END_TAG //处理 break; } event = parser.next(); //指向下一个标签 }
应用:读取/data/data/package/files/目录下的person.xml文件
XML文件如下:<?xml version="1.0" encoding="UTF-8"?> <persons> <person id="1"> <name>xiazdong-1</name> <age>20</age> </person> <person id="2"> <name>xiazdong-2</name> <age>30</age> </person> </persons>
从上面可以看出,<person></person>可以看做一个JavaBean,而<persons></persons>组成了一个person队列;
因此我们创建一个Person的JavaBean:
package org.xiazdong.vo; public class Person { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public Person() { } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
接下来,我们编写如下readXML方法,使得将XML文件中的数据变成一个person队列;
public class XmlService { public List<Person> readXml(InputStream in) throws Exception { XmlPullParser parser = Xml.newPullParser(); parser.setInput(in, "UTF-8"); List<Person> list = null; Person person = null; int event = parser.getEventType(); //开始解析,并获取事件 /* * 可选事件包括: * (1)START_DOCUMENT * (2)END_DOCUMENT * (3)START_TAG * (4)END_TAG * */ while (event != XmlPullParser.END_DOCUMENT) { switch (event) { case XmlPullParser.START_DOCUMENT: list = new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if ("person".equals(parser.getName())) { person = new Person(); int id = Integer.parseInt(parser.getAttributeValue(0)); person.setId(id); } if("name".equals(parser.getName())){ person.setName(parser.nextText()); } if("age".equals(parser.getName())){ person.setAge(Integer.parseInt(parser.nextText())); } break; case XmlPullParser.END_TAG: if("person".equals(parser.getName())) list.add(person); break; } event = parser.next(); //读取下一个 } return list; } }
编写好此方法之后,我们可以测试此方法:
public class XmlTest extends AndroidTestCase{ private static final String TAG = "XmlTest"; public void testRead() throws Exception{ XmlService service = new XmlService(); List<Person> list = service.readXml(this.getContext().openFileInput("person.xml")); Log.i(TAG, String.valueOf(list.size())); for(Person p:list){ Log.i(TAG, p.toString()); } } }
运行效果如下:
三、使用Serializer解析器写入XML文件
核心代码如下:XmlSerializer serializer = Xml.newSerializer(); //创建一个Serializer解析器 serializer.setOutput(out,"utf-8"); //设置输出流及输出的编码为UTF-8 serializer.startDocument("UTF-8",true); //输出开始文档<?xml version="1.0" encoding="UTF-8" standalone="true"?> serializer.startTag(null,"tagname"); //输出<tagname> serializer.attribute(null,"name","value"); //输出<tagname name="value"> serializer.text("value"); //输出<tagname></tagname> serializer.endTag(null,"tagname");//结束标签 serializer.endDocument();//结束文档
应用:创建上面提到的person.xml文件到/data/data/package/files中
以下代码用于将person队列写入输出流文件(此处为文件输出流)public class XmlService { public void writeXml(List<Person> list,OutputStream out)throws Exception{ XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(out, "UTF-8"); serializer.startDocument("UTF-8", true); serializer.startTag(null, "persons"); for(Person p:list){ serializer.startTag(null,"person"); serializer.attribute(null, "id", String.valueOf(p.getId())); serializer.startTag(null, "name"); serializer.text(p.getName()); serializer.endTag(null, "name"); serializer.startTag(null, "age"); serializer.text(p.getAge()+""); serializer.endTag(null, "age"); serializer.endTag(null, "person"); } serializer.endTag(null, "persons"); serializer.endDocument(); out.flush(); out.close(); } }
测试代码如下:
public class XmlTest extends AndroidTestCase{ public void testWrite()throws Exception{ XmlService service = new XmlService(); List<Person> list = new ArrayList<Person>(); for(int i=0;i<3;i++){ Person p = new Person(); p.setId(i); p.setName("xiazdong-"+i); p.setAge(20+i); list.add(p); } OutputStream out = this.getContext().openFileOutput("person.xml", Context.MODE_PRIVATE); service.writeXml(list, out); } }
总结:使用Pull解析器读取,使用Serializer写入;
相关文章推荐
- Android--入门---16---(Android中xml 的生成 & 解析---DOM . SAX . PULL)
- Android入门:Pull解析XML
- Android入门:Pull解析XML
- Android——PULL解析XML
- Android系列--DOM、SAX、Pull解析XML
- Android Pull解析Xml字符串
- android之xml数据解析(Pull)
- android-XML解析Dom,Sax,Pull
- Android 采用Pull解析XML内容 【学习记录】
- android xml解析(dom,pull,sax)总结
- Android 开发之路十---------SAX,DOM,PULL解析XML
- Android解析XML三种方式(PULL、SAX、DOM)
- Android解析XML(PULL)与Android解析Json
- Android解析XML之XmlPullParser
- android使用XmlPullParser来解析XML文件
- AndroidXML解析之Pull
- android中的三种xml解析方法---sax解析,pull解析,dom
- android解析XML总结(SAX、Pull、Dom三种方式)
- Android 采用PULL来解析XML
- Android XML解析学习——Pull方式