XML-Pull解析

前端之家收集整理的这篇文章主要介绍了XML-Pull解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


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"name>thinkinginjava</price>85.5bookbookid="15">SpringinAction>39.0>

Pull解析的代码如下PullParseService.java

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

里面使用到的Book.java类

classBook{
  • privateintid;
  • privateStringname;
  • floatprice;
  • intgetId(){
  • returnid;
  • voidsetId(intid){
  • this.id=id;
  • publicStringgetName(){
  • returnname;
  • voidsetName(Stringname){
  • this.name=name;
  • floatgetPrice(){
  • returnprice;
  • voidsetPrice(floatprice){
  • this.price=price;
  • @Override
  • publicStringtoString(){
  • returnthis.id+":"+this.name+":"+this.price;
  • 测试使用的是android的单元测试,代码如下:

    importandroid.test.AndroidTestCase;
  • importandroid.util.Log;
  • importcom.xtlh.cn.service.PullParseService;
  • classtestPullParseServiceextendsAndroidTestCase{
  • staticfinalStringTAG="testPullParseService";
  • voidtestPull() InputStreaminput=this.getClass().getClassLoader().getResourceAsStream("book.xml");
  • PullParseServicepull=newPullParseService();
  • List<Book>books=pull.getBooks(input);
  • for(Bookbook:books){
  • Log.i(TAG,book.toString());
  • 要使用android的单元测试,需要在AndroidManifest.xml文件中加入声明,AndroidManifest.xml如下:

    xmlversion="1.0"encoding="utf-8"manifestxmlns:android="http://schemas.android.com/apk/res/android"
  • package="com.xlth.cn.demo"
  • android:versionCode="1"
  • android:versionName="1.0"applicationandroid:icon="@drawable/icon"android:label="@string/app_name"uses-libraryandroid:name="android.test.runner"/>
  • activityandroid:name=".PullParseDemo"
  • android:label="@string/app_name"intent-filteractionandroid:name="android.intent.action.MAIN"categoryandroid:name="android.intent.category.LAUNCHER"activityapplicationuses-sdkandroid:minSdkVersion="7"instrumentationandroid:name="android.test.InstrumentationTestRunner"
  • android:targetPackage="com.xlth.cn.demo"android:label="TestsforMyApp"manifest>
  • 原文链接:/xml/297305.html

    猜你在找的XML相关文章