---------------------如有兴趣,请加AndroidQQ群242431704,500人的超级群,欢迎各位的加入--------------

---------------------如有兴趣,请加AndroidQQ群242431704,500人的超级群,欢迎各位的加入--------------




Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。Pull解析和Sax解析不一样的地方有(1)pull读取xml文件后触发相应的事件调用方法返回的是数字(2)pull可以在程序中控制想解析到哪里就可以停止解析。看实例:

book.xml如下:

Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <books>
  3. <bookid="12">
  4. <name>thinkinginjava</name>
  5. <price>85.5</price>
  6. </book>
  7. <bookid="15">
  8. <name>SpringinAction</name>
  9. <price>39.0</price>
  10. </book>
  11. </books>

Pull解析的代码如下PullParseService.java

Java代码 收藏代码
  1. importjava.io.InputStream;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. importorg.xmlpull.v1.XmlPullParser;
  5. importandroid.util.Xml;
  6. importcom.xtlh.cn.entity.Book;
  7. publicclassPullParseService{
  8. publicstaticList<Book>getBooks(InputStreaminputStream)throwsException{
  9. List<Book>books=null;
  10. Bookbook=null;
  11. XmlPullParserparser=Xml.newPullParser();
  12. parser.setInput(inputStream,"UTF-8");
  13. intevent=parser.getEventType();//产生第一个事件
  14. while(event!=XmlPullParser.END_DOCUMENT){
  15. switch(event){
  16. caseXmlPullParser.START_DOCUMENT://判断当前事件是否是文档开始事件
  17. books=newArrayList<Book>();//初始化books集合
  18. break;
  19. caseXmlPullParser.START_TAG://判断当前事件是否是标签元素开始事件
  20. if("book".equals(parser.getName())){//判断开始标签元素是否是book
  21. book=newBook();
  22. book.setId(Integer.parseInt(parser.getAttributeValue(0)));//得到book标签的属性值,并设置book的id
  23. }
  24. if(book!=null){
  25. if("name".equals(parser.getName())){//判断开始标签元素是否是name
  26. book.setName(parser.nextText());
  27. }elseif("price".equals(parser.getName())){//判断开始标签元素是否是price
  28. book.setPrice(Float.parseFloat(parser.nextText()));
  29. }
  30. }
  31. break;
  32. caseXmlPullParser.END_TAG://判断当前事件是否是标签元素结束事件
  33. if("book".equals(parser.getName())){//判断结束标签元素是否是book
  34. books.add(book);//将book添加到books集合
  35. book=null;
  36. }
  37. break;
  38. }
  39. event=parser.next();//进入下一个元素并触发相应事件
  40. }//endwhile
  41. returnbooks;
  42. }
  43. }

里面使用到的Book.java类

Java代码 收藏代码
  1. publicclassBook{
  2. privateintid;
  3. privateStringname;
  4. privatefloatprice;
  5. publicintgetId(){
  6. returnid;
  7. }
  8. publicvoidsetId(intid){
  9. this.id=id;
  10. }
  11. publicStringgetName(){
  12. returnname;
  13. }
  14. publicvoidsetName(Stringname){
  15. this.name=name;
  16. }
  17. publicfloatgetPrice(){
  18. returnprice;
  19. }
  20. publicvoidsetPrice(floatprice){
  21. this.price=price;
  22. }
  23. @Override
  24. publicStringtoString(){
  25. returnthis.id+":"+this.name+":"+this.price;
  26. }
  27. }

测试使用的是android的单元测试,代码如下:

Java代码 收藏代码
  1. importjava.io.InputStream;
  2. importjava.util.List;
  3. importandroid.test.AndroidTestCase;
  4. importandroid.util.Log;
  5. importcom.xtlh.cn.entity.Book;
  6. importcom.xtlh.cn.service.PullParseService;
  7. publicclasstestPullParseServiceextendsAndroidTestCase{
  8. privatestaticfinalStringTAG="testPullParseService";
  9. publicvoidtestPull()throwsException{
  10. InputStreaminput=this.getClass().getClassLoader().getResourceAsStream("book.xml");
  11. PullParseServicepull=newPullParseService();
  12. List<Book>books=pull.getBooks(input);
  13. for(Bookbook:books){
  14. Log.i(TAG,book.toString());
  15. }
  16. }
  17. }

要使用android的单元测试,需要在AndroidManifest.xml文件中加入声明,AndroidManifest.xml如下:

Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.xlth.cn.demo"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
  7. <uses-libraryandroid:name="android.test.runner"/>
  8. <activityandroid:name=".PullParseDemo"
  9. android:label="@string/app_name">
  10. <intent-filter>
  11. <actionandroid:name="android.intent.action.MAIN"/>
  12. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  13. </intent-filter>
  14. </activity>
  15. </application>
  16. <uses-sdkandroid:minSdkVersion="7"/>
  17. <instrumentationandroid:name="android.test.InstrumentationTestRunner"
  18. android:targetPackage="com.xlth.cn.demo"android:label="TestsforMyApp"/>
  19. </manifest>

Pull解析可以用于很多场合,例如接受google天气,rss新闻等,希望对大家有帮助!

更多相关文章

  1. Android的事件转递机制
  2. Android中使用代码执行shell命令
  3. Android_判断文件是否存在并创建代码
  4. Android / iOS 静态代码扫描工具调研
  5. Android 内部API (android.internal)和隐藏代码(@hide)概述
  6. Android Notification通知栏、点击事件、悬浮通知的简单实现

随机推荐

  1. Android(Java):Android的状态栏通知(Noti
  2. Funambol android eclipse上的配置及说明
  3. android 、java优质资料合集
  4. Android(安卓)4.0的图形硬件加速及绘制技
  5. 解决Android Studio Gradle DSL method n
  6. Android访问WebService
  7. Android开发之SlidingDrawer(一)
  8. 使用Android提供的模拟任意地理位置,报jav
  9. Android 中文 API (34) —— RadioGroup
  10. appwidget-provider