📜  Android XMLPullParser教程

📅  最后修改于: 2020-10-10 01:28:03             🧑  作者: Mango

Android XMLPullParser教程

Android建议使用XMLPullParser比SAX和DOM解析xml文件,因为它速度快。

org.xmlpull.v1.XmlPullParser接口提供使用XMLPullParser解析XML文档的功能。

XmlPullParser的事件

XMLPullParser的next()方法将光标指针移动到下一个事件。通常,我们使用XMLPullParser接口中定义的四个常量(作为事件工作)。

START_TAG:已读取XML开始标签。

TEXT:已读取文本内容;可以使用getText()方法检索文本内容。

END_TAG:已读取结束标签。

END_DOCUMENT:无更多活动可用

android XMLPullParser的示例

activity_main.xml

从面板拖动一个列表视图。现在,activity_main.xml文件将如下所示:



    

    


xml文件

在项目的资产目录内创建一个名为employee.xml的xml文件。




    
        1
        Sachin
        50000      
    
    
        2
        Nikhil
        60000  
    
    


员工阶层

现在创建与xml文件相对应的Employee类。

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类

现在,编写代码以使用XMLPullParser解析xml文件。在这里,我们返回列表中的所有员工。

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 employees= new ArrayList();
    private Employee employee;
    private String text;
 
    public List getEmployees() {
        return employees;
    }
 
    public List 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类

现在,编写代码以在ListView中显示列表数据。

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 employees = null;
        try {
            XmlPullParserHandler parser = new XmlPullParserHandler();
            InputStream is=getAssets().open("employees.xml");
            employees = parser.parse(is);
            
            ArrayAdapter adapter =new ArrayAdapter
(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;
    }
    
}

输出: