微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XML解析PULL

1、Pull概述

Android系统中和创建XML相关的包为org.xmlpull.v1,在这个包中不仅提供了用于创建XMLXmlSerializer,还提供了用来解析XML的Pull方式解析器XmlPullParser

XmlSerializer没有像XmlPullParser那样提取XML事件,而是把它们推出到数据流OutputStream或Writer中。

XmlSerializer提供了很直观的API,即使用startDocument开始文档,endDocument结束文档,startTag开始元素,endTag结束元素,text添加文本等。


Pull方式创建XML,应用了标准xml构造器org.xmlpull.v1.XmlSerializer来创建 XML ,org.xmlpull.v1.XmlPullParser来解析XML,需要导入以下内容

org.xmlpull.v1

org.xmlpull.v1.XmlPullParser;

org.xmlpull.v1.XmlPullParserException;

org.xmlpull.v1.XmlPullParserFactory;

org.xmlpull.v1.XmlSerializer;

sdk源码查看路径google code


Pull 创建和解析 XML 的效果图:





2、Pull 创建 XML

pull方式,创建XML是通过XmlSerializer类实现

首先,通过XmlSerializer得到创建XML的实例xmlSerializer

接着,通过xmlSerializer 设置输出xmlSerializer.setoutput,xmlSerializer.startDocument("utf-8",null)设置xml属性

然后,通过xmlSerializer 创建startDocument、startTag、text、endTag、endDocument等

Code

  1. /**Pull方式,创建XML*/
  2. publicStringpullXMLCreate(){
  3. StringWriterxmlWriter=newStringWriter();
  4. Person[]persons=newPerson[3];//创建节点Person对象
  5. persons[0]=newPerson(1,"sunboy_2050","http://blog.csdn.net/sunboy_2050");
  6. 1]=newPerson(2,"baidu","http://www.baidu.com");
  7. 2]=newPerson(3,"google","http://www.google.com");
  8. try{
  9. ////方式一:使用Android提供的实用工具类android.util.Xml
  10. //XmlSerializerxmlSerializer=Xml.newSerializer();
  11. //方式二:使用工厂类XmlPullParserFactory的方式
  12. XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();
  13. XmlSerializerxmlSerializer=factory.newSerializer();
  14. xmlSerializer.setoutput(xmlWriter);//保存创建的xml
  15. xmlSerializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output",true);
  16. //xmlSerializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-indentation","");//设置属性
  17. //xmlSerializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-line-separator","\n");
  18. xmlSerializer.startDocument("utf-8",null);//<?xmlversion='1.0'encoding='UTF-8'standalone='yes'?>
  19. xmlSerializer.startTag("","root");
  20. xmlSerializer.attribute("","author","homer");
  21. "date","2012-04-28");
  22. intpersonsLen=persons.length;
  23. for(inti=0;i<personsLen;i++){
  24. "person");//创建person节点
  25. "id");
  26. xmlSerializer.text(persons[i].getId()+"");
  27. xmlSerializer.endTag("","name");
  28. xmlSerializer.text(persons[i].getName());
  29. "blog");
  30. xmlSerializer.text(persons[i].getBlog());
  31. "person");
  32. }
  33. "root");
  34. xmlSerializer.endDocument();
  35. }catch(XmlPullParserExceptione){//XmlPullParserFactory.newInstance
  36. e.printstacktrace();
  37. }catch(IllegalArgumentExceptione){//xmlSerializer.setoutput
  38. }catch(IllegalStateExceptione){ }catch(IOExceptione){ }catch(Exceptione){
  39. }
  40. savedXML(fileName,xmlWriter.toString());
  41. returnxmlWriter.toString();
  42. }


运行结果:






3、Pull 解析 XML

pull方式,解析xml是通过XmlPullParser类实现

首先,通过XmlPullParser得到解析xml的实例xpp

接着,通过xpp设置输入 xpp.setInput(is,"utf-8"),声明定义保存xml信息的数据结构(如:Person数组)

然后,通过xpp解析START_DOCUMENT、START_TAG、TEXT、END_TAG、END_DOCUMENT等

Code

?
    /**Pull方式,解析XML*/
  1. publicStringpullXMLResolve(){
  2. InputStreamis=readxml(fileName);
  3. //XmlPullParserxpp=Xml.newPullParser();
  4. XmlPullParserxpp=factory.newPullParser();
  5. xpp.setInput(is,"utf-8");
  6. List<Person>personsList=null;//保存xml的person节点
  7. Personperson=null;
  8. StringBufferxmlHeader=null;//保存xml头部
  9. Stringele=null;//Elementflag
  10. inteventType=xpp.getEventType();
  11. while(XmlPullParser.END_DOCUMENT!=eventType){
  12. switch(eventType){
  13. caseXmlPullParser.START_DOCUMENT:
  14. personsList=newArrayList<Person>();//初始化persons
  15. xmlHeader=newStringBuffer();//初始化xmlHeader
  16. break;
  17. caseXmlPullParser.START_TAG:
  18. if("root".equals(xpp.getName())){
  19. StringattrAuthor=xpp.getAttributeValue(0);
  20. StringattrDate=xpp.getAttributeValue(1);
  21. xmlHeader.append("root").append("\t\t");
  22. xmlHeader.append(attrAuthor).append("\t");
  23. xmlHeader.append(attrDate).append("\n");
  24. }elseif("person".equals(xpp.getName())){
  25. person=newPerson();//创建person实例
  26. }elseif("id".equals(xpp.getName())){
  27. ele="id";
  28. }elseif("name".equals(xpp.getName())){
  29. ele="name";
  30. }elseif("blog".equals(xpp.getName())){
  31. ele="blog";
  32. }else{
  33. ele=null;
  34. caseXmlPullParser.TEXT:
  35. if(null!=ele){
  36. if("id".equals(ele)){
  37. person.setId(Integer.parseInt(xpp.getText()));
  38. }elseif("name".equals(ele)){
  39. person.setName(xpp.getText());
  40. }elseif("blog".equals(ele)){
  41. person.setBlog(xpp.getText());
  42. caseXmlPullParser.END_TAG:
  43. if("person".equals(xpp.getName())){
  44. personsList.add(person);
  45. person=null;
  46. ele=null;
  47. eventType=xpp.next();//下一个事件类型
  48. xmlWriter.append(xmlHeader);
  49. intpersonsLen=personsList.size();
  50. 0;i<personsLen;i++){
  51. xmlWriter.append(personsList.get(i).toString());
  52. returnxmlWriter.toString();
  53. }

运行结果:





4、Person类

请参见前面博客Android 创建与解析XML(二)—— Dom方式【4、Person类】



代码下载

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类