最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開發(fā)之XML文件解析的使用

 更新時間:2013年04月26日 09:48:51   作者:  
本篇文章介紹了,Android開發(fā)之XML文件解析的使用。需要的朋友參考下

  前言 

  本文主要介紹在Android中怎樣來解析XML文件。主要采用的是SAX機制,SAX全稱為Simple API for XML,它既是一種接口,也是一個軟件包。作為接口,SAX是事件驅動型XML解析的一個標準接口。XML文件解析一般有2種方法,DOM和SAX。其中DOM需要先將xml文檔全部讀入到電腦內存中,當文檔內容太大時,該方法并不適用。SAX就比較好的解決了該問題,它是逐行解析的,可以隨時中斷。但是SAX的操作比較復雜。因此,這2種方法各有優(yōu)缺點,看具體應用情況。在前面的文章Qt學習之路_12(簡易數(shù)據(jù)管理系統(tǒng))中使用的是Qt中的DOM方法。

  實驗說明

  大多數(shù)SAX實現(xiàn)都會產生類似下面的事件:

  在文檔的開始和結束處觸發(fā)文檔處理事件;在文檔內每一XML元素結束解析的前后觸發(fā)元素事件;任何元數(shù)據(jù)通常豆油單獨的事件交付;在處理文檔的DTD或者Schema時產生DTD 或者Schema事件;產生錯誤事件用來通知主機應用程序解析錯誤。

  SAX模型示意圖如下所示:

   

  如果要用SAX來解析xml文檔,則需要一個類來繼承android系統(tǒng)提供的ContentHandler類。但是如果繼承ContentHandler這個類, 即使你不使用這個類提供的所有方法,你也必須實現(xiàn)其內部的所有方法(一般情況下沒有使用的方法可以直接用空方法代替),但是這樣開發(fā)起來不是很方便。因此我們可以改為繼承DefaultHandler這個類,這樣的話我們只需要實現(xiàn)程序中所需要的方法即可,其它的方法這個類內部其實已經用空方法代替了。

ContentHandler接口的方法有以下幾種:

void startDocument();//文檔解析開始時執(zhí)行

void endDocument();//文檔解析結束時執(zhí)行

void startElement(String uri, String localName, String qName, Attributes atts);//標簽開始解析時執(zhí)行

void endElement(String uri, String localName, String qName, Attributes atts);//標簽解析結束時執(zhí)行

void characters(char[] ch, int start, int length );//解析標簽屬性時執(zhí)行

  android中使用SAX來解析xml文件,需先建立一個SAX工廠,即SAXParserFactory對象,還需建立一個XMLReader對象,該類綁定ContentHandler子類,且與xml源文件結合在一起。即其處理過程為創(chuàng)建事件處理程序,創(chuàng)建SAX解析器,鍵事件處理程序分配給解析器,對文檔進行解析,將每個事件發(fā)送給處理程序。 

  判斷String類型的值是否相等采用的是String類的equal方法。 

  本實驗是解析一段xml代碼,然后在上面每個解析函數(shù)中打印一些內容。主要是學會怎么使用SAX模型來來創(chuàng)建解析器,怎樣使用ContentHandler子類的函數(shù)來進行解析。

  實驗主要部分代碼:

Mainactivity.java:

復制代碼 代碼如下:

package com.example.xml;

import java.io.StringReader;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import android.app.Activity;
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 {

    private Button start  = null;
    private TextView display = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        start = (Button)findViewById(R.id.start);
        start.setOnClickListener(new StartOnClickListener());
    }

    public class StartOnClickListener implements OnClickListener{

        public void onClick(View v) {
            // TODO Auto-generated method stub
            //注意2點,第1:字符串中如果要換行寫,則應該用引號和加號來相加得到,不能直接換行寫
            //第2點:如果字符串中有字符,則用括號里面的符合(\")代替引號。
            //我這里用的xml文件直接為該程序layout的布局xml文件
//            String result_str =
//            "<RelativeLayout " +
//              "  xmlns:tools=\"http://schemas.android.com/tools\" " +
//              "  android:layout_width=\"match_parent\" " +
//              "  android:layout_height=\"match_parent\" > " +
//           
//             "   <Button  " +
//               "     android:id=\"@+id/start\"    " +
//                 "   android:layout_width=\"fill_parent\"    " +
//                  "  android:layout_height=\"wrap_content\"    " +
//                 "   android:layout_alignParentBottom=\"true\"    " +
//                  "  android:text=\"Start XML Parse\"    "    +
//                "    /> " +
//              "  <TextView " +
//                "    android:id=\"@+id/display\" " +
//               "     android:layout_width=\"fill_parent\"    " +
//                "    android:layout_height=\"fill_parent\"    " +
//                "    android:gravity=\"center\"    " +
//                "     android:layout_alignParentLeft=\"true\"    "    +
//                "     android:layout_above=\"@+id/start\"    "    +
//                "     android:text=\"The XML Parse Example!!\"    " +
//                "    />    " +
//        "    </RelativeLayout>";

            String result_str =        
             "   <Button  " +
               "     id=\"@+id/start\"    " +
                 "   layoutwidth=\"fillparent\"    " +
                  "  layoutheight=\"wrapcontent\"    " +
                 "   layoutalignParentBottom=\"true\"    " +
                  "  text=\"Start XML Parse\"    "    +
                "    </Button> " ;

           
            System.out.println(result_str);
            try{
                //創(chuàng)建SAX工廠
                SAXParserFactory factory = SAXParserFactory.newInstance();
                XMLReader reader = factory.newSAXParser().getXMLReader();
                reader.setContentHandler(new MyContentHandler());
                reader.parse(new InputSource(new StringReader(result_str)));
            }
            catch(Exception e) {
                e.printStackTrace();
            }

        }

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}


MyContentHandler.java:
復制代碼 代碼如下:

package com.example.xml;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MyContentHandler extends DefaultHandler {

    String tagname, sid, swidth, sheight, text, salign;

    //當解析到標簽的屬性欄時調用該方法
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub
        if(tagname.equals("id"))
            sid = new String(ch, start, length);
        else if(tagname.equals("layoutwidth"))
            swidth = new String(ch, start, length);
        else if(tagname.equals("layoutheight"))
            sheight = new String(ch, start, length);
        else if(tagname.equals("layoutalignParentBottom"))
            salign = new String(ch, start, length);
        else if(tagname.equals("text"))
            text = new String(ch, start, length);
        super.characters(ch, start, length);
    }

    //解析文檔結束調用
    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        System.out.println("........end.......");
        super.endDocument();
    }

    //解析標簽結束時調用
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        // TODO Auto-generated method stub
        if(tagname.equals("Button")) {
            this.printout();
        }
        super.endElement(uri, localName, qName);
    }

    //解析文檔開始時調用
    @Override
    public void startDocument() throws SAXException {
        // TODO Auto-generated method stub
        System.out.println("........begin.......");
        super.startDocument();
    }

    //標簽開始時執(zhí)行
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        tagname = localName;
        if(tagname.equals("Button")) {
            for(int i = 0; i < attributes.getLength(); i++) {       
                //得到第i個屬性的名字和值
                System.out.println(attributes.getLocalName(i) + "=" + attributes.getValue(i));
            }

        }
        super.startElement(uri, localName, qName, attributes);
    }

    //輸出標簽屬性解析結果
    private void printout() {
        System.out.print("id: ");
        System.out.println(sid);
        System.out.print("layout_width: ");
        System.out.println(swidth);
        System.out.print("layout_height: ");
        System.out.println(sheight);
        System.out.print("layout_alignParentBottom: ");
        System.out.println(salign);
        System.out.print("text: ");
        System.out.println(text);
    }

}

相關文章

  • Android原生視頻播放VideoView的使用

    Android原生視頻播放VideoView的使用

    這篇文章主要為大家詳細介紹了Android原生視頻播放VideoView的使用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Dagger2 Android依賴注入學習筆記

    Dagger2 Android依賴注入學習筆記

    這篇文章主要介紹了Dagger2 Android依賴注入學習筆記,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Flutter?Flow實現(xiàn)滑動顯隱層示例詳解

    Flutter?Flow實現(xiàn)滑動顯隱層示例詳解

    這篇文章主要為大家介紹了Flutter?Flow實現(xiàn)滑動顯隱層示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Android View的事件分發(fā)機制深入分析講解

    Android View的事件分發(fā)機制深入分析講解

    事件分發(fā)從手指觸摸屏幕開始,即產生了觸摸信息,被底層系統(tǒng)捕獲后會傳遞給Android的輸入系統(tǒng)服務IMS,通過Binder把消息發(fā)送到activity,activity會通過phoneWindow、DecorView最終發(fā)送給ViewGroup。這里就直接分析ViewGroup的事件分發(fā)
    2023-01-01
  • android TabHost(選項卡)的使用方法

    android TabHost(選項卡)的使用方法

    Android中的選項卡是用TabHost實現(xiàn)的,下面我們用一個例子說明他的使用方法
    2013-11-11
  • Android中使用Camera類編寫手機拍照App的實例教程

    Android中使用Camera類編寫手機拍照App的實例教程

    這篇文章主要介紹了Android中使用Camera類編寫手機拍照App的實例教程,整理了Camera調用硬件進行拍照的一些常用方法,需要的朋友可以參考下
    2016-04-04
  • Android 屏蔽和捕獲Home鍵的示例代碼

    Android 屏蔽和捕獲Home鍵的示例代碼

    本文主要介紹 Android 屏蔽和捕獲Home 鍵的方法,并附有代碼實例參考,在開發(fā)過程中可能會遇到這樣的功能,有需要的同學可以參考下
    2016-07-07
  • Android仿網易新聞圖片詳情下滑隱藏效果示例代碼

    Android仿網易新聞圖片詳情下滑隱藏效果示例代碼

    這篇文章主要給大家介紹了關于利用Android如何仿網易新聞圖片詳情下滑隱藏效果的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • Android實現(xiàn)的狀態(tài)欄定制和修改方法

    Android實現(xiàn)的狀態(tài)欄定制和修改方法

    這篇文章主要介紹了Android實現(xiàn)的狀態(tài)欄定制和修改方法,涉及Android針對狀態(tài)欄屬性設置的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Android retrofit上傳文件實例(包含頭像)

    Android retrofit上傳文件實例(包含頭像)

    下面小編就為大家分享一篇Android retrofit上傳文件實例(包含頭像),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01

最新評論

施甸县| 浦北县| 南乐县| 锡林浩特市| 浙江省| 林口县| 沧源| 本溪| 萨迦县| 萨迦县| 阿鲁科尔沁旗| 鱼台县| 扎兰屯市| 苏尼特左旗| 晋州市| 吴旗县| 诸城市| 金门县| 岳阳市| 石家庄市| 舒兰市| 扬中市| 永城市| 华容县| 贵溪市| 泉州市| 枞阳县| 张家港市| 淮安市| 克东县| 腾冲县| 庐江县| 库伦旗| 定州市| 东乡族自治县| 军事| 贺州市| 五家渠市| 太白县| 遂昌县| 临高县|