android xml解析之PULL解析
2011-11-23 10:47
369 查看
最近项目刚好用到这个,就学习了下,网上有很多教程,我也是把学习的过程记录在这里。
xml解析,我看了大概有三种方法,dom解析,sax解析和pull解析。这里,我介绍下pull解析方法。
pull解析方式是趋于事件驱动的,读取xml返回的是数字。
基本标签为:
读取到xml的声明返回 START_DOCUMENT;
读取到xml的结束返回 END_DOCUMENT ;
读取到xml的开始标签返回 START_TAG ;
读取到xml的结束标签返回 END_TAG ;
读取到xml的文本返回 TEXT;
返回的都是int类型。
好吧,下面还是看代码吧。首先得有一个xml,简单弄一个。
然后我们可以建一个对象,用来保存属性数据。比图:location类如下:
其实根据上面标签的意思,我们大概也能猜到,pull解析的工作原理。简单来说,就是遇到什么标签,执行什么结果。我们在代码里看:
pull解析方法:
好了,返回的locations里面已经有我们需要的值了。保存。
xml解析,我看了大概有三种方法,dom解析,sax解析和pull解析。这里,我介绍下pull解析方法。
pull解析方式是趋于事件驱动的,读取xml返回的是数字。
基本标签为:
读取到xml的声明返回 START_DOCUMENT;
读取到xml的结束返回 END_DOCUMENT ;
读取到xml的开始标签返回 START_TAG ;
读取到xml的结束标签返回 END_TAG ;
读取到xml的文本返回 TEXT;
返回的都是int类型。
好吧,下面还是看代码吧。首先得有一个xml,简单弄一个。
<locations> <location name="北京" code="001"> <area>1290</area> <url>http://www.beijing.com</url> </location> <location name="南京" code="002"> <area>1090</area> <url>http://www.nanjing.com</url> </location> <location name="上海" code="003"> <area>2290</area> <url>http://www.shanghai.com</url> </location> <location name="武汉" code="004"> <area>1292</area> <url>http://www.wuhan.com</url> </location> </locations>
然后我们可以建一个对象,用来保存属性数据。比图:location类如下:
public class Location { public String name; public String code; public String area; public String url; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }
其实根据上面标签的意思,我们大概也能猜到,pull解析的工作原理。简单来说,就是遇到什么标签,执行什么结果。我们在代码里看:
pull解析方法:
public List<Location> parse(String path){ Log.i("parse", "parse"); List<Location> locations = new ArrayList<Location>(); Location location = null; InputStream in = null; //解析器 try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser parser = factory.newPullParser(); //文件流 in = getResources().getAssets().open(path);//xml文件放在assets里的,所以用这样的方法,如果放在其他文件夹,则改下。 Log.i("in", ""+in.read()+"----"+path); //设置编码 parser.setInput(in, "utf-8"); Log.i("parser", parser.getText()+"ccc"); //获得解析事件的类别,这里有开始文档,结束文档。。。。 int evenType = parser.getEventType(); //循环,知道结束 while(evenType != XmlPullParser.END_DOCUMENT){ Log.i("evenType", ""+evenType); switch(evenType){ case XmlPullParser.START_TAG: String tag = parser.getName(); System.out.print("tag"+tag); //如果是loacation标签,则要开始了,实例化对象 if(tag.equalsIgnoreCase("location")){ location = new Location(); location.setName(parser.getAttributeValue(null , "name")); location.setCode(parser.getAttributeValue(null , "code")); }else if(location != null){ //读取内部标签的内容 if(tag.equalsIgnoreCase("area")){ location.setArea(parser.nextText); }else if(tag.equalsIgnoreCase("url")){ location.setUrl(parser.nextText()); // Log.i("url", parser.nextText());//如果需要打印出数据,千万不能这样打印,因为之前以前next了,你打印的时候再用next,就报错了。(这是我遇到的,你可能不会这么傻的。-_-) } } break; //结束标签 case XmlPullParser.END_TAG: if(parser.getName().equalsIgnoreCase("location") && location !=null){ locations.add(location);//加入list中 plocation = null; } break; default:break; } //如果xml没有结束,则导航到下一个river节点.这个一点不能漏了哦。 evenType=parser.next(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } return locations; }
好了,返回的locations里面已经有我们需要的值了。保存。
相关文章推荐
- Android-DOM、SAX、PULL解析网络xml
- android pull 解析xml方式
- Android 解析XML之三 PULL
- Android之Pull解析XML文件
- Android XML数据解析——pull技术
- Android 生成和Pull解析xml
- Android利用XmlPullParse对XML进行解析读取(一)
- android 解析xml -XmlPullParser
- 我的Android进阶之旅------>Android中解析XML 技术详解---->SAX解析、DOM解析、PULL解析
- android(14)_解析xml文件1_pull
- AndroidXML解析之Pull
- Android开发之Pull解析读取和生成XML文件
- android中解析XML文件方式—DOM SAX PULL
- android-XML解析Dom,Sax,Pull
- Android[中级教程]第五章 XML解析之PULL解析器
- Android Pull 解析 XML
- Android系列--DOM、SAX、Pull解析XML
- android解析XML总结(SAX、Pull、Dom三种方式)
- Android数据存储---Pull解析Xml文件
- Android开发:XML解析与DOM、SAX、PULL解析对比