国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android App中使用Pull解析XML格式數(shù)據(jù)的使用示例

2019-12-12 06:35:35
字體:
供稿:網(wǎng)友

 Pull解析XML文件的方式與SAX解析XML文件的方式大致相同,他們都是基于事件驅(qū)動的。所以,利用pull解析XML文件需要下面幾個步驟:

     1)通過XMLPullParserFactory獲取XMLPullParser對象。

     2)通過XMLPullParser對象設(shè)置輸入流。

     3)通過parser.next(),持續(xù)的解析XML文件直到文件的尾部。

下面的幾個方法是經(jīng)常需要的:XMLPullParserFacotry.newInstance( )    facotry.newPullParser( )   parser.setInput( )       parser.next( ).

下面通過一個例子描述上面的幾個步驟:

//1.第一步,創(chuàng)建解析工廠XmlPullParserFactory factory = XmlPullParserFactory.newInstance();//設(shè)置支持命名空間factory.setNamespaceAware(true);//2.生成parser對象     XmlPullParser parser = factory.newPullParser();//3.設(shè)置輸入parser.setInput(new StringReader("<?xml version=/"1.0/" ?><poem><title>靜夜思</title><author>李白</author><content>床前明月光,疑似地上霜,舉頭忘明月,低頭思故鄉(xiāng)</content></poem>"));//獲取輸入類型int eventType = parser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {   if (eventType == XmlPullParser.START_DOCUMENT) {  Log.d("tag", "----"+parser.getName());  }   if (eventType == XmlPullParser.START_TAG) {  Log.d("tag", "----"+parser.getName());  }   if (eventType == XmlPullParser.TEXT) {  Log.d("tag", "----"+parser.getText());  }   if (eventType == XmlPullParser.END_TAG) {  Log.d("tag", "----"+parser.getName());  }  //不斷的去更新  eventType = parser.next(); }

打印出的對象:

2016415151330157.png (640×238)

pull在android 集成了這種解析,性能和sax差不多,個人認為用來來比sax解析容易多了;采用事件驅(qū)動進行解析。
dom(Document Object Model)文檔對象模型:是W3C組織推薦的解析XML的一種方式;一般只能只能解析比較小的XML文件;因為dom解析是把整個XML放入內(nèi)存,占用內(nèi)存比較大,但對文檔的
增刪改查標(biāo)膠容易操作。
sax(Simple API for XML)不是官方的標(biāo)準(zhǔn),但它是XML社區(qū)事實上的標(biāo)準(zhǔn),幾乎所有的XML解析器都支持它。sax解析一般適合xml的讀取,sax解析是從上往下讀取,一行一行來讀。

來看一個完整的實例:

package com.android.xiong.documentpullxml;  import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.LinkedHashMap;  import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory;  import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.AsyncTask; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView;  public class MainActivity extends Activity {    TextView showtxt;   Button btshow;    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     showtxt = (TextView) findViewById(R.id.showtxt);     btshow = (Button) findViewById(R.id.showxml);     btshow.setOnClickListener(new OnClickListener() {              @Override       public void onClick(View v) {         GetBaiduXmlBooks baiduxml=new GetBaiduXmlBooks();         baiduxml.execute("http://bcs.duapp.com/meinvlook/books.xml");       }     });   }    // 異步任務(wù)   class GetBaiduXmlBooks extends       AsyncTask<String, Integer, LinkedHashMap<String, String>> {      ProgressDialog progress;      // 初始化ProgressDialog     @Override     protected void onPreExecute() {       progress = new ProgressDialog(MainActivity.this);       progress.setTitle("提示!");       progress.setMessage("正在解析百度云存儲的XML");       progress.setCanceledOnTouchOutside(false);       progress.setButton(ProgressDialog.BUTTON_NEUTRAL, "取消",           new DialogInterface.OnClickListener() {              @Override             public void onClick(DialogInterface dialog, int which) {               // 取消任務(wù)               GetBaiduXmlBooks.this.cancel(true);               progress.dismiss();             }           });       progress.show();     }      // 進行耗時操作     @Override     protected LinkedHashMap<String, String> doInBackground(String... params) {       String xmurl = params[0];       LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();       URL url;       try {         url = new URL(xmurl);         HttpURLConnection connection = (HttpURLConnection) url             .openConnection();         connection.setConnectTimeout(10000);         connection.setRequestMethod("GET");         InputStream instream = connection.getInputStream();         // 獲取xml解析器         XmlPullParser parser = XmlPullParserFactory.newInstance()             .newPullParser();         parser.setInput(instream, "UTF-8");         int type=parser.getEventType();         //開始解析xml文件         while (type!= XmlPullParser.END_DOCUMENT) {           if (type == XmlPullParser.START_TAG) {             // 獲取開始標(biāo)簽             if (parser.getName().equals("書名")) {               //獲取節(jié)點的值               map.put("書名", parser.nextText());             }             if (parser.getName().equals("價格")) {               map.put("價格", parser.nextText());             }             if (parser.getName().equals("作者")) {               map.put("作者", parser.nextText());             }             if (parser.getName().equals("性別")) {               map.put("性別", parser.nextText());             }             if (parser.getName().equals("年齡")) {               map.put("年齡",parser.nextText());             }           }           type=parser.next();         }       } catch (IOException e) {         e.printStackTrace();       } catch (XmlPullParserException e) {         e.printStackTrace();       }       return map;     }      @Override     protected void onPostExecute(LinkedHashMap<String, String> result) {        for (String txt : result.keySet()) {         showtxt.append(txt+":"+result.get(txt)+"/n");       }       progress.dismiss();            }    }    @Override   public boolean onCreateOptionsMenu(Menu menu) {     // Inflate the menu; this adds items to the action bar if it is present.     getMenuInflater().inflate(R.menu.main, menu);     return true;   }  } 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent"   android:orientation="vertical"   tools:context=".MainActivity" >      <Button      android:id="@+id/showxml"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:text="@string/btshowxml"/>    <TextView     android:id="@+id/showtxt"     android:layout_width="wrap_content"     android:layout_height="wrap_content" />  </LinearLayout> <!-- 獲取網(wǎng)絡(luò)權(quán)限 --> <uses-permission android:name="android.permission.INTERNET"/> 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 双辽市| 绥芬河市| 来凤县| 历史| 年辖:市辖区| 和政县| 祁东县| 新密市| 茶陵县| 文昌市| 恩施市| 鄂托克前旗| 南投县| 南江县| 广元市| 巴南区| 同德县| 会昌县| 勐海县| 五台县| 漳浦县| 资源县| 墨脱县| 鄂温| 崇文区| 长垣县| 化州市| 大荔县| 竹北市| 中西区| 法库县| 本溪市| 道孚县| 浦县| 乌兰察布市| 彰化市| 洱源县| 云浮市| 安新县| 滦平县| 富平县|