Android使用pull解析xml
来源:互联网 发布:李斯特改编 知乎 编辑:程序博客网 时间:2024/04/24 08:01
Android解析XML有SAX、DOM、Pull等几种方式,今天就简单写写Pull方式解析xml。
Pull内置于Android系统中,是官方解析布局文件所使用的方式。Pull和Sax类似,都是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。
它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。、
Android系统中和Pull方式相关的包为org.xmlpull.v1.
经常需要使用的类:
XmlPullParserFactory 工厂类,用来创建pull解析器
XmlPullParser pull解析器
XmlPullParserException 异常
Pull内置于Android系统中,是官方解析布局文件所使用的方式。Pull和Sax类似,都是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。
它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。、
Android系统中和Pull方式相关的包为org.xmlpull.v1.
经常需要使用的类:
XmlPullParserFactory 工厂类,用来创建pull解析器
XmlPullParser pull解析器
XmlPullParserException 异常
XmlSerializer 该类用来将指定的对象转化为XML文档
要解析的xml如下:
<?xml version="1.0" encoding="UTF-8"?><persons> <person id="1"> <name>张三</name> <age>33</age> </person> <person id="2"> <name>李四</name> <age>44</age> </person> <person id="3"> <name>周五</name> <age>55</age> </person> <person id="4"> <name>王六</name> <age>66</age> </person></persons>
解析xml的方法:
/** * 解析XML * @param inputStream * @return * @throws Exception */private static List<Person> getXml(InputStream inputStream) throws Exception{ Person person = null; List<Person> persons =null; XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(inputStream, "utf-8"); int event = pullParser.getEventType(); //触发第一个事件 while (event != XmlPullParser.END_DOCUMENT){ switch (event){ case XmlPullParser.START_DOCUMENT: persons = new ArrayList<>(); break; case XmlPullParser.START_TAG: if("person".equals(pullParser.getName())){ int id = new Integer(pullParser.getAttributeValue(0)); person = new Person(); person.setId(id); } if(person != null){ if("name".equals(pullParser.getName())){ person.setName(pullParser.nextText()); } if("age".equals(pullParser.getName())){ person.setAge(new Short(pullParser.nextText())); } } break; case XmlPullParser.END_TAG: if("person".equals(pullParser.getName())) { persons.add(person); person = null; } break; } event = pullParser.next(); } return persons;}
生成xml的方法:
/** * 生成xml * @param persons * @param outputStream * @throws Exception */private void putXml(List<Person> persons, OutputStream outputStream) throws Exception{ XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(outputStream, "utf-8"); serializer.startDocument("utf-8", true); serializer.startTag(null, "persons"); for(Person person : persons){ serializer.startTag(null, "person"); serializer.attribute(null, "id", String.valueOf(person.getId())); serializer.startTag(null, "name"); serializer.text(person.getName()); serializer.endTag(null, "name"); serializer.startTag(null, "age"); serializer.text(String.valueOf(person.getAge())); serializer.endTag(null, "age"); serializer.endTag(null, "person"); } serializer.endTag(null, "persons"); serializer.endDocument(); outputStream.flush(); outputStream.close();}
开始读取xml的内容:
try { List<Person> persons = getXml(getAssets().open("persons.xml")); for(int i = 0; i<persons.size(); i++){ Person person = persons.get(i); tv.append("id:"+person.getId()+" name:"+person.getName()+" age:"+person.getAge()+"\n"); }}catch (Exception e){ e.printStackTrace();}结果是:
开始生成xml:
File file = new File(Environment.getExternalStorageDirectory(), "persons.xml");try{ FileOutputStream outputStream = new FileOutputStream(file); putXml(getXml(getAssets().open("persons.xml")), outputStream);}catch (Exception e){ e.printStackTrace();}
可以看到在sd卡的文件里多了一个persons.xml文件:
0 0
- android使用pull解析xml
- android使用pull解析xml
- Android使用pull解析xml
- android xml使用pull解析
- Android使用pull解析xml
- Android使用pull解析xml
- android 使用 pull 解析xml文件
- android使用pull方式解析xml
- android 使用 pull 解析xml文件
- android使用pull的方式解析xml
- android Pull解析xml 使用小结
- android 使用pull方式解析xml文件
- android 使用pull 方式解析 xml文件
- Android 中使用Pull解析XML文件
- Android 读写XML文件(使用pull解析)
- Android 中使用Pull解析XML文件
- Android学习-- 使用Pull解析XML文件
- Android-使用pull解析xml文件
- 改变字体大小
- WCF、WebAPI、WCFREST、WebService之间的区别
- 动态规划之0-1背包问题(POJ3624)
- 古谚、评论与论断、名篇与名言
- 图像处理基本原理----基本概念
- Android使用pull解析xml
- Bash脚本实现批量作业并行化
- 卷积
- redis aof持久化的源码分析
- 项目上线流程
- Ionic2视图的创建与删除
- 2017.03.31:数据仓库与数据分析01
- 读《统计自然语言处理》——语料库与知识词汇库
- LSD_SLAM 编译、安装到运行demo