• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Android學習筆記(16)————Android的XML解析之pull方式

    /********************************************************************************************
    * author:conowen@大鐘
    * E-mail:[email protected]
    * http://blog.csdn.net/conowen
    * 注:本文為原創,僅作為學習交流使用,轉載請標明作者及出處。

    ********************************************************************************************/


    1、XML文檔簡單解說:

    首先先看一個XML文檔的截取部分:

    <wordbook>
    
    <item>    <word>cupboard</word>
        <trans><![CDATA[n. 食櫥;碗柜]]></trans>
        <phonetic><![CDATA[['k?b?d]]]></phonetic>
        <tags>CET4-EASY</tags>
    </item>
    
    <item>    <word>a</word>
        <trans><![CDATA[art. 一;任一;每一 
     a : 朱 
    FORM A: 普惠證|普惠制產地證|惠制原產地證明書 
    many a: 許多的|一個又一個的|很多]]></trans>
        <phonetic><![CDATA[[ei]]]></phonetic>
        <tags>CET4-EASY</tags>
    </item>
    
    <item>    <word>abandon</word>
        <trans><![CDATA[n. 狂熱;放任 
    vt. 遺棄;放棄 
    abandon: 放棄|確認期權失效|委付 
    Call abandon: 呼叫中途掛機 
    abandon  v: 放棄]]></trans>
        <phonetic><![CDATA[[?'bænd?n]]]></phonetic>
        <tags>CET4-EASY</tags>
    </item>
    
    <item>    <word>ability</word>
        <trans><![CDATA[n. 能力,能耐;才能 
    Ability: 力|能力|本領 
    encapsulating ability: 包被抑制性 
    limited ability: 有限能力]]></trans>
        <phonetic><![CDATA[[?'biliti]]]></phonetic>
        <tags>CET4-EASY</tags>
    </item>
    
    
    </wordbook>
    
    

    模型:

    < 文檔標簽>
    <子標簽><標簽A>str1<標簽A/><標簽B>str2<標簽B/><子標簽/>
    
    <子標簽><標簽A>str1<標簽A/><標簽B>str2<標簽B/><子標簽/>
    
    <子標簽><標簽A>str1<標簽A/><標簽B>str2<標簽B/><子標簽/>
    <文檔標簽/>


    
    

    在上面的 XML 中,文檔標簽是 <wordbook>。文檔中的其他的所有子標簽都被包含在文檔<bookstore> 中。文檔標簽 <wordbook> 有四個 <item>子標簽。每一個 <item>子標簽有四個節點:<word>, <trans>, <phonetic> 以及<tags>節點,其中每個節點都包含這個節點的內容。

    注意:標簽里面的str內容,如果是換行的,解析xml文件之后,打印出來的也是換行的

    XML文件下載地址:http://ishare.iask.sina.com.cn/f/20283647.html

    2、Android平臺的XML解析方案:

    Android平臺上可以使用以下三種XML解析方式:

    2.1、Simple API for XML(SAX)

    SAX解析方式是基于事件驅動的。當讀到文檔標簽的開始或者結束時,會有相應的事件,當讀到一個子節點的開始標簽或者結束標簽時也會有相應的事件。當讀到某一個子節點的其中一個節點時也會有相應的事件。由于Android平臺的事件驅動是基于回調函數的,也就是說遇到上述事件時,會實現一個回調函數的接口。

    2.2、Document Object Model(DOM)

    DOM解析XML時,會把整個XML文檔視作一個節點樹,直接把整個節點樹讀取到內存里面,再進行解析,這樣一來優點就是操作簡單方便,但是缺點就是對于大體積的XML文檔,解析起來機會很慢,而且很耗費資源。

    2.3、Android附帶的pull解析器

    Pull方基本與SAX一樣

    簡而言之,對于大體積的XML文件,最好選用SAX或者Pull方式解析,對于小體積的XML文檔,可以選擇DOM解析。

    3、Pull解析方式詳解

    注:以下所說的標簽包括子標簽和子標簽里面的所有標簽

    Pull解析的相關方法:

    XmlResourceParser xrp;//定義一個XML資源解析器

    XmlResourceParser.START_DOCUMENT 遇到文檔標簽的開始

    XmlResourceParser.END_DOCUMENT 遇到文檔標簽的結束

    XmlPullParser.START_TAG: 遇到標簽的開始
    XmlPullParser.END_TAG:遇到標簽的結束xrp.getName()獲取標簽的名稱xrp.nextText();獲取標簽里面的內容(str)(不是xrp.gettext();)xrp.next();繼續讀取下一個標簽

    xrp.nextTag();繼續讀取下一個標簽,和next()基本 一樣

    下面寫一個解析"英語詞典.XML",來實現一個android 字典程序。詳細解說可以看注釋。

    效果圖:

    /*author:conowen
     * date:2012.4.1
     */
    package com.conowen.Dictionary;
    
    import android.app.Activity;
    import android.content.res.XmlResourceParser;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class DictionaryActivity extends Activity {
    	String input = null;
    	String match = null;
    	EditText et = null;
    	Button search = null;
    	Button del = null;
    	TextView display = null;
    
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		et = (EditText) findViewById(R.id.et);
    		search = (Button) findViewById(R.id.search);
    		del = (Button) findViewById(R.id.del);
    		display = (TextView) findViewById(R.id.tv);
    
    		search.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				input = et.getText().toString();
    				// 現在工程的res目錄下面新建一個xml文件夾,把cet4.xml拖進去
    				XmlResourceParser xrp = getResources().getXml(R.xml.cet4);// 定義一個XML資源解析器
    
    				try {
    					StringBuilder strbuilder = new StringBuilder("");
    					while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {// 當還沒到XML文檔結束時
    						if (xrp.getEventType() == XmlResourceParser.START_TAG) {// 當遇到開始標簽時,包括子標簽和子標簽里面的所有標簽
    							String tagname = xrp.getName();// 獲取標簽的名字
    
    							if (tagname.equals("word")) {// 取出單詞
    								match = xrp.nextText();// 讀取標簽里面內容,也就是這個單詞
    
    								if (match.equals(input)) {// 如果取出來的這個單詞和輸入的單詞相等
    									xrp.next();// 讀取這個下一個標簽,也就是<trans>翻譯
    									strbuilder.append(xrp.nextText());// 取出翻譯
    									display.setText(strbuilder);// 顯示翻譯
                                                                            break;
    								}
    
    							}
    
    						}
    						xrp.next();// 讀取下一個標簽
    
    					}
    
    				} catch (Exception e) {
    					// TODO: handle exception
    				}
    
    			}
    		});
    		del.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				display.setText("");
    				et.setText("");
    
    			}
    		});
    
    	}
    }


    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    版權聲明:本文為iteye_5282原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/iteye_5282/article/details/82304194

    智能推薦

    android學習筆記----xml語法、約束、解析

    目錄 xml作用: xml語法: 元素: 元素--命名規范: 屬性: 注釋: CDATA區: 特殊字符: XML約束: DTD約束: Schema約束: XML解析: DOM解析: SAX解析: PULL解析:           xml作用: 一:可以在客戶端/服務器之間傳遞數據 二:用來保存有關系的數據 三:用來做配置文件 在android中的...

    【Android學習筆記】XmlResourceParser解析xml文件

    最近學習Android時,需要用到解析XML文件里的數據,可以用XmlResourceParser來解析xml文件,正好將此記錄下來。 XmlResourceParser里常用的字段和方法 首先先給出源碼里面一些比較基礎的,常用的方法和字段。 常用的字段 getEventType() getName() getText() getAttributeName(int index) getAttrib...

    pull 方式解析xml文件

    2019獨角獸企業重金招聘Python工程師標準>>> XmlPullParser解析xml的android文檔docs/reference/org/xmlpull/v1/XmlPullParser.html xmlPullParer官網:http://www.xmlpull.org/ 例子:要解析的文件:pull.xml      &nb...

    Android中使用Pull解析器解析xml文件+進行簡單的單元測試

    Android中使用Pull解析器解析xml文件+進行簡單的單元測試 我來給大家介紹Android用得最多的一種解析xml數據的技術:Pull解析器解析,之前介紹過Java中兩種解析xml的技術:Dom解析和SAX解析,Dom比較適合小數據量的解析,然而SAX適合大數據量的解析工作,但比較復雜。第三種解析技術Pull解析,是一種比前面兩種方法更加簡單的解析技術,更加符合面向對象的思想,因為這是按照...

    [Android面試] Xml 解析辨析---SAX、DOM、Pull

      在Android中提供了三種解析XML的方式: SAX(Simple API XML),DOM(Document Objrect Model),以及Android推薦的Pull解析方式。 解析概念 SAX: 是事件驅動型XML解析的一個標準接口,簡單地說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束、文檔(document)結束等...

    猜你喜歡

    Android開發:XML簡介及DOM、SAX、PULL解析對比

    目錄 目錄 定義 XML(extensible Markup Language) ,是一種數據標記語言 & 傳輸格式 作用 對數據進行標記(結構化數據) 對數據進行存儲 對數據進行傳輸 與html的區別:html用于顯示信息;xml用于存儲&傳輸信息 XML特點 標簽可進行自定義 XML允許作者定義自己的標簽和文檔結構 自我描述性 XML文檔實例 僅僅是一個純文本,有文本處理能力的...

    Android使用Sax 及Pull 解析Xml demo

    客戶端開發中,越來越多的接口使用的數據傳輸類型時json了,xml相對較少。恰好當前要使用到了xml傳遞數據,寫個demo權當記錄安卓中如何使用sax 及 pull解析xml. 1.常用的幾種解析XML的方式   Dom ,Sax ,Pull  Dom解析Xml 是將整個Xm文檔當成一個對象來處理,會先把整個文檔讀入到內存里。是基于樹的結構,通常需要加載整文檔和構造DOM樹,然...

    android解析xml文件的方式(其三)

    2019獨角獸企業重金招聘Python工程師標準>>> 上一節中,我們使用SAX方式解析xml文檔, SAX方式是基于事件驅動的。當然android的事件機制是基于回調函數的。在這一節中,我們用另外一種方式解析xml文檔,這種方式也是基于事件驅動的,與SAX方式一樣,它就是PULL方式。只不過PULL方式讀xml回調方法返回的是數字。    讀取到xml的聲明...

    android解析xml文件的方式(其一)

    2019獨角獸企業重金招聘Python工程師標準>>> 在androd手機中處理xml數據時很常見的事情,通常在不同平臺傳輸數據的時候,我們就可能使用xml,xml是與平臺無關的特性,被廣泛運用于數據通信中,那么在android中如何解析xml文件數據呢?  通常有三種方式:DOM,SAX,PULL  在這一節中我們使用DOM方式來處理。  DOM方...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    精品国产乱码久久久久久蜜桃不卡