AndroidがPull方式に基づいてxmlを解析する方法の詳細

5339 ワード

この例では,AndroidがPull方式に基づいてxmlを解析する方法について述べる.皆さんの参考にしてください.具体的には以下の通りです.
Pull解析はSax解析とよく似ていて軽量級の解析で、AndroidのカーネルにPullが埋め込まれているので、サードパーティ製jarパッケージを追加してPullをサポートする必要はありません.
Pull解析とSax解析の違いは次のとおりです.
(1)pullがxmlファイルを読み込んだ後、対応するイベント呼び出しメソッドをトリガーして返されるのは数値
(2)pullはプログラム中で解析したい箇所を制御して解析を停止することができる.
例を見てみましょう.
book.xmlは次のとおりです.



 
  thinking in java
  85.5
 
 
  Spring in Action
  39.0
 



Pull解析のコードは次のとおりです.PullParseServices.java

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
import com.xtlh.cn.entity.Book;
public class PullParseService {
 public static List getBooks(InputStream inputStream) throws Exception{
  List books = null;
  Book book = null;
  XmlPullParser parser = Xml.newPullParser();
  parser.setInput(inputStream, "UTF-8");
  int event = parser.getEventType();//       
  while(event!=XmlPullParser.END_DOCUMENT){
   switch(event){
   case XmlPullParser.START_DOCUMENT://               
    books = new ArrayList();//   books  
    break;
   case XmlPullParser.START_TAG://                 
    if("book".equals(parser.getName())){//           book
     book = new Book();
     book.setId(Integer.parseInt(parser.getAttributeValue(0)));//  book      ,   book id
    }
    if(book!=null){
     if("name".equals(parser.getName())){//           name
      book.setName(parser.nextText());
     }else if("price".equals(parser.getName())){//           price
      book.setPrice(Float.parseFloat(parser.nextText()));
     }
    }
    break;
   case XmlPullParser.END_TAG://                 
    if("book".equals(parser.getName())){//           book
     books.add(book);// book   books  
     book = null;
    }
    break;
   }
   event = parser.next();//              
  }//end while
  return books;
 }
}


中に入っているブックJAvaクラス

public class Book {
 private int id;
 private String name;
 private float price;
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public float getPrice() {
  return price;
 }
 public void setPrice(float price) {
  this.price = price;
 }
 @Override
 public String toString(){
  return this.id+":"+this.name+":"+this.price;
 }
}


テストはandroidのユニットテストを使用し、コードは以下の通りです.

import java.io.InputStream;
import java.util.List;
import android.test.AndroidTestCase;
import android.util.Log;
import com.xtlh.cn.entity.Book;
import com.xtlh.cn.service.PullParseService;
public class testPullParseService extends AndroidTestCase{
 private static final String TAG = "testPullParseService";
 public void testPull() throws Exception{
  InputStream input = this.getClass().getClassLoader().getResourceAsStream("book.xml");
  PullParseService pull = new PullParseService();
  List books = pull.getBooks(input);
  for(Book book : books){
   Log.i(TAG,book.toString());
  }
 }
}


Androidのユニットテストを使用するにはAndroid Manifestが必要です.xmlファイルに声明を入れ、AndroidManifest.xmlは次のとおりです.



 
 
  
   
    
    
   
  
 
 
 



Pull解析はgoogle天気、rssニュースなど、多くの場合に使用できます.
Androidに関する詳細に興味のある方は、「Android操作XMLデータテクニックまとめ」、「Androidプログラミングのactivity操作テクニックまとめ」、「Androidリソース操作テクニックまとめ」、「Androidファイル操作テクニックまとめ」、「Android操作SQLiteデータベーステクニックまとめ」、「Android操作jsonフォーマットデータテクニックまとめ」、『Androidデータベース操作テクニックまとめ』、『Androidプログラミング開発のSDカード操作方法まとめ』、『Android開発入門と進級チュートリアル』、『AndroidビューViewテクニックまとめ』および『Androidコントロール使い方まとめ』
この文書がAndroidプログラムの設計に役立つことを願っています.