Android XMLPullParser教程含代碼

Android XMLPullParser教程

Android建議使用XMLPullParser來(lái)解析xml文件,而不是SAX和DOM,因?yàn)樗俣瓤臁?b class="xhide">愛(ài)掏網(wǎng) - it200.com

org.xmlpull.v1.XmlPullParser 接口提供了使用XMLPullParser解析XML文檔的功能。愛(ài)掏網(wǎng) - it200.com

XmlPullParser的事件

XMLPullParser的 next()方法 將光標(biāo)指針移到下一個(gè)事件。愛(ài)掏網(wǎng) - it200.com通常,我們使用XMLPullParser接口中定義的四個(gè)常量(作為事件)。愛(ài)掏網(wǎng) - it200.com

START_TAG :讀取了一個(gè)XML開(kāi)始標(biāo)簽。愛(ài)掏網(wǎng) - it200.com

TEXT :讀取了文本內(nèi)容;可以使用getText()方法獲取文本內(nèi)容。愛(ài)掏網(wǎng) - it200.com

END_TAG :讀取了一個(gè)結(jié)束標(biāo)簽。愛(ài)掏網(wǎng) - it200.com

END_DOCUMENT :沒(méi)有更多的事件可用

Android XMLPullParser示例

activity_main.xml

從palette中拖動(dòng)一個(gè)listview。愛(ài)掏網(wǎng) - it200.com現(xiàn)在activity_main.xml文件的內(nèi)容如下:

<RelativeLayout 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"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

    </ListView>

</RelativeLayout>

XML文檔

在項(xiàng)目的assets目錄下創(chuàng)建一個(gè)名為employees.xml的xml文件。愛(ài)掏網(wǎng) - it200.com

<?xml version="1.0" encoding="UTF-8"?>
<employees>
    <employee>
        <id>1</id>
        <name>Sachin</name>
        <salary>50000</salary>      
    </employee>
    <employee>
        <id>2</id>
        <name>Nikhil</name>
        <salary>60000</salary>  
    </employee>

</employees>

Employee類(lèi)

現(xiàn)在創(chuàng)建與xml文件相對(duì)應(yīng)的雇員類(lèi)。愛(ài)掏網(wǎng) - it200.com

package com.example.xmlpullparsing;
public class Employee {
     private int id;
     private String name;
     private float salary;
        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 getSalary() {
        return salary;
    }
    public void setSalary(float salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return " Id= "+id + "\n Name= " + name + "\n Salary= " + salary;
    }
}

XMLPullParserHandler類(lèi)

現(xiàn)在編寫(xiě)使用XMLPullParser解析xml文件的代碼。愛(ài)掏網(wǎng) - it200.com在這里,我們將以列表形式返回所有的員工。愛(ài)掏網(wǎng) - it200.com

package com.example.xmlpullparsing;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;


public class XmlPullParserHandler {
    private List<Employee> employees= new ArrayList<Employee>();
    private Employee employee;
    private String text;

    public List<Employee> getEmployees() {
        return employees;
    }

    public List<Employee> parse(InputStream is) {
           try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            XmlPullParser  parser = factory.newPullParser();

            parser.setInput(is, null);

            int eventType = parser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                String tagname = parser.getName();
                switch (eventType) {
                case XmlPullParser.START_TAG:
                    if (tagname.equalsIgnoreCase("employee")) {
                        // create a new instance of employee
                        employee = new Employee();
                    }
                    break;

                case XmlPullParser.TEXT:
                    text = parser.getText();
                    break;

                case XmlPullParser.END_TAG:
                    if (tagname.equalsIgnoreCase("employee")) {
                        // add employee object to list
                        employees.add(employee);
                    }else if (tagname.equalsIgnoreCase("id")) {
                        employee.setId(Integer.parseInt(text));
                    }  else if (tagname.equalsIgnoreCase("name")) {
                        employee.setName(text);
                    } else if (tagname.equalsIgnoreCase("salary")) {
                        employee.setSalary(Float.parseFloat(text));
                    } 
                    break;

                default:
                    break;
                }
                eventType = parser.next();
            }

        } catch (XmlPullParserException e) {e.printStackTrace();} 
        catch (IOException e) {e.printStackTrace();}

        return employees;
    }
}

MainActivity類(lèi)

現(xiàn)在,編寫(xiě)代碼將列表數(shù)據(jù)顯示在ListView中。愛(ài)掏網(wǎng) - it200.com

package com.example.xmlpullparsing;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       ListView listView = (ListView) findViewById(R.id.listView1);

        List<Employee> employees = null;
        try {
            XmlPullParserHandler parser = new XmlPullParserHandler();
            InputStream is=getAssets().open("employees.xml");
            employees = parser.parse(is);

            ArrayAdapter<Employee> adapter =new ArrayAdapter<Employee>
    (this,android.R.layout.simple_list_item_1, employees);
            listView.setAdapter(adapter);

        } catch (IOException e) {e.printStackTrace();}

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

下載這個(gè)示例

輸出:

聲明:所有內(nèi)容來(lái)自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。
發(fā)表評(píng)論
更多 網(wǎng)友評(píng)論0 條評(píng)論)
暫無(wú)評(píng)論

返回頂部

主站蜘蛛池模板: 99在线视频网站| 免费黄色app网站| 亚洲高清无在码在线无弹窗| 亚洲国产精品一区二区三区在线观看 | 漂亮诱人的女邻居| 日韩黄色免费观看| 好男人www视频| 国产在线观看无码免费视频| 伊人久久精品亚洲午夜| 久久国产精品免费专区| avtt天堂网久久精品| 高h黄全肉一女n男古风| 欧美综合区自拍亚洲综合图区| 日本三级在线视频| 国产麻豆天美果冻无码视频| 国产一区二区三区不卡免费观看| 亚洲码在线中文在线观看| 中文无线乱码二三四区| 伊人色综合久久天天人守人婷| 色94色欧美一区| 有色视频在线观看免费高清在线直播| 失禁h啪肉尿出来高h男男视频| 国产乱理伦片在线看夜| 亚洲免费闲人蜜桃| 99精产国品一二三产| 色综合热无码热国产| 最新亚洲春色av无码专区| 国产高清不卡视频| 免费无码AV一区二区| 中文字幕色婷婷在线精品中| 日本www视频| 欧美成人精品一区二区| 女人被男人桶爽| 又大又黄又粗又爽的免费视频 | 日本乱码一卡二卡三卡永久| 国产精品无码无卡无需播放器| 免费特级黄毛片| 中文无码热在线视频| 野花社区视频在线观看| 日韩美女拍拍免费视频网站| 国产精品视频一区二区三区不卡|