student.xml

<?xml version="1.0" encoding="utf-8"?>
<stundets>
<student id="20120812115">
<name>张三</name>
<speciality>通信工程</speciality>
<qq>843200157</qq>
</student>
<student id="20120812116">
<name>李四</name>
<speciality>网络工程</speciality>
<qq>812256156</qq>
</student>
<student id="20120812117">
<name>王五</name>
<speciality>软件工程</speciality>
<qq>812750158</qq>
</student>
</stundets>

student.java

package xom.supermario.pullxml;

public class Student {
long Id; //用于存放id信息
String Name; //用于存放Name信息
String Speciality; //用于存放专业信息
long QQ; //用于存放QQ信息
//带参数构造函数,用于初始化类
public Student(long id, String name, String speciality, long qQ) {
super();
Id = id;
Name = name;
Speciality = speciality;
QQ = qQ;
}
//不带参数构造函数
public Student() {
super();
}
//取得id
public long getId() {
return Id;
}
//取得Name
public String getName() {
return Name;
}
//取得QQ
public long getQQ() {
return QQ;
}
//取得专业信息
public String getSpeciality() {
return Speciality;
}
//设置id
public void setId(long id) {
Id = id;
}
//设置姓名
public void setName(String name) {
Name = name;
}
//设置QQ
public void setQQ(long qQ) {
QQ = qQ;
}
//设置专业
public void setSpeciality(String speciality) {
Speciality = speciality;
}
}

studentHandler.java

package xom.supermario.pullxml;

import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import android.util.Log; public class StudentHandler extends DefaultHandler {
private String preTAG; //用于存储xml节点的名称
private List<Student> ListStudent;
private Student stu;
//无参数实例化类
public StudentHandler() {
super();
}
//带参数实例化类
public StudentHandler(List<Student> listStudent) {
super();
ListStudent = listStudent;
}
//开始解析文档
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
Log.i("------>", "文档开始");
super.startDocument();
}
//开始解析文档的元素
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
Log.i("localName-------->", localName);
preTAG=localName; //将当前元素的名称保存到preTAG
if ("student".equals(localName)) {
stu=new Student(); //实例化一个student类
//将ID信息保存到stu中
stu.setId(Long.parseLong(attributes.getValue(0))); for (int i = 0; i < attributes.getLength(); i++) {
Log.i("attributes-------->",String.valueOf(stu.getId()));
}
}
//这句话记得要执行
super.startElement(uri, localName, qName, attributes);
} public void endDocument() throws SAXException { Log.i("------>", "文档结束");
super.endDocument();
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
preTAG="";
if ("student".equals(localName)) {
ListStudent.add(stu);
Log.i("-------->", "一个元素解析完成");
}
super.endElement(uri, localName, qName);
}
//解析节点文本内容
public void characters(char[] ch, int start, int length)
throws SAXException { String str;
//找出元素中的“name”节点
if ("name".equals(preTAG)) {
str=new String(ch,start,length);
stu.setName(str);
Log.i("name=", stu.getName());
//找出元素中的“speciality”节点
}else if ("speciality".equals(preTAG)) {
str=new String(ch,start,length);
stu.setSpeciality(str);
Log.i("speciality=", stu.getSpeciality());
//找出元素中的“qq”节点
}else if ("qq".equals(preTAG)) {
str=new String(ch,start,length);
stu.setQQ(Long.parseLong((str)));
Log.i("QQ=", String.valueOf(stu.getQQ()));
}
super.characters(ch, start, length);
}
public List<Student> getListStudent() {
return ListStudent;
} public void setListStudent(List<Student> listStudent) {
ListStudent = listStudent;
}
}

layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn1"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="PULL解析" />
<ListView
android:id="@+id/listView1"
android:layout_height="wrap_content"
android:layout_width="fill_parent" />
</LinearLayout>

pullXMLActivity.java

package xom.supermario.pullxml;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory; import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView; public class PullXMLActivity extends Activity {
//新建一个按键
private Button button;
//新建一个列表
private ListView listView;
//新建一个数组列表用于存放字符串数组
private ArrayList<String> list=new ArrayList<String>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)findViewById(R.id.btn1);
listView=(ListView) findViewById(R.id.listView1);
//为按键绑定监听器
button.setOnClickListener(new ButtonListener());
} class ButtonListener implements OnClickListener{ @Override
public void onClick(View v) {
//将解析后的结果存储到students中
List<Student> students=parserXMl();
// List<Student> students=null;
//枚举数组中的元素
for (Iterator iterator = students.iterator(); iterator.hasNext();) {
Student student = (Student) iterator.next();
//将类的内容转换成字符串,依次存储到list中
list.add(String.valueOf(student.getId())+" "+student.getName()+" "+student.getSpeciality()+" "+String.valueOf((student.getQQ())));
}
//新建一个适配器daapter用于给listview提供数据
ArrayAdapter<String> adapter=new ArrayAdapter<String>(PullXMLActivity.this, android.R.layout.simple_list_item_1, list);
//为listview绑定适配器
listView.setAdapter(adapter);
} } //解析xml文件
private List<Student> parserXMl()
{
//初始化一个List<student>变量,用于将所有student成员
List<Student> students=null;
//初始化一个student变量,用于存储每一个节点的信息
Student stu=null;
try{
//打开资源文件student.xml
InputStream inputstream=PullXMLActivity.this.getResources().getAssets().open("student.xml");
//创建XmlParser有两种方式
//方式一:使用工厂类XmlPullParserFactory
XmlPullParserFactory pullFactory=XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser=pullFactory.newPullParser();
//方式二:使用Android提供的实用工具类android.util.Xml
//XmlPullParser xmlPullParser=Xml.newPullParser();
//设置输入字节流为inputstream,并设置编码方式为“UTF-8”
xmlPullParser.setInput(inputstream, "UTF-8");
//取得事件类型,用于开始解析时的判断
int eventType=xmlPullParser.getEventType();
//循环遍历整个文件直到解析完毕
while(eventType != XmlPullParser.END_DOCUMENT)
{
/*打印log显示事件类型
*START_DOCUMENT:0
*END_DOCUMENT:1
*START_TAG:2
*END_TAG:3
*TEXT:4
*/
Log.e("guojs--->event",eventType+"");
//用于存储节点名称
String localName=null;
switch(eventType)
{
case XmlPullParser.START_DOCUMENT:
//碰到文档开头则实例化students变量,并打印log
students=new ArrayList<Student>();
Log.e("guojs","start document!");
break;
case XmlPullParser.START_TAG:
{
localName=xmlPullParser.getName();
if ("student".equals(xmlPullParser.getName())) {
stu=new Student(); //实例化一个student类
//将ID信息保存到stu中
stu.setId(Long.parseLong(xmlPullParser.getAttributeValue(0)));
Log.e("guojs",stu.getId()+"");
}
else if(stu != null)
{
//声明一个变量用于存储节点文本
String currentData=null;
if("name".equals(xmlPullParser.getName()))
{
/*注意这里nextText()的使用:当前事件为START_TAG,
* 如果接下去是文本,就会返回当前的文本内容;如果下一个事件是END_TAG
* 就会返回空字符串;否则抛出一个异常。
*/
currentData=xmlPullParser.nextText();
//存储”name“的信息
stu.setName(currentData);
}
else if("speciality".equals(xmlPullParser.getName()))
{
currentData=xmlPullParser.nextText();
//存储专业信息
stu.setSpeciality(currentData);
}else if("qq".equals(xmlPullParser.getName()))
{
currentData=xmlPullParser.nextText();
//存储QQ信息
stu.setQQ(Long.parseLong(currentData));
}
}
}
break;
case XmlPullParser.END_TAG:
{
localName=xmlPullParser.getName();
Log.e("guojs--end tag",localName);
if("student".equals(localName) && stu != null)
{
//将stu添加进students数组列表中
students.add(stu);
//设置stu为空
stu = null;
}
}
break;
default:
break;
}
//解析下一个事件
eventType=xmlPullParser.next();
}
}catch(Exception e)
{
e.printStackTrace();
}
return students;
}
}

XML PULL模型的更多相关文章

  1. XML Pull

    java [android]xml  new parse tool XML parsing with XML Pull import org.xmlpull.v1.XmlPullParser;

  2. Android 解析XML—pull解析方式

    在Android中,常见的XML解析器分别为SAX解析器.DOM解析器和PULL解析器,其中PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部 ...

  3. android解析xml (pull)

    1. xml <persons> <person id="18"> <name>furong</name> <age>2 ...

  4. analysed of J-SON/XML processing model Extend to java design model (J-SON/XML处理模型分析 扩展到Java设计模型 )

    一.JSON和XML 1.JSON JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.可在不同平台之间进行数据交换.JSON ...

  5. Nacos配置中心交互模型是 push 还是 pull ?你应该这么回答

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富- 对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服 ...

  6. PULL解析XML的运行机制详解

    PULL解析简单易上手,基本上看一遍,基本上就会解析啦,但总是感觉对PULL解析的运行机制不是很了解,就总结了以下事件驱动到底是怎么执行的.. PULL: Android内置了PULL解析器.PULL ...

  7. 非常简单的XML解析(SAX解析、pull解析)

    这里只是把解析的数据当日志打出来了 非常简单的xml解析方式 package com.example.demo.service; import java.io.IOException; import ...

  8. Android解析XML(PULL方式)

    PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDocu ...

  9. [android]解析XML文件的方法有三种:PULL,DOM,SAM

    PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDocu ...

随机推荐

  1. Android Intent简介

    Intent对象主要用来在Android程序的Activity,Service和BroadcastReceiver这3大组件之间传输数据,而针对这3大组件,有独立的Intent传输机制,分别如下:1. ...

  2. 排序(5)---------高速排序(C语言实现)

    继shell发明了shell排序过后呢,各位计算机界的大牛们又開始不爽了,为什么他能发明.我就不能发明呢.于是又有个哥们蹦出来了.哎...那么多排序,就木有一个排序是中国人发明的.顺便吐槽一下,一百年 ...

  3. [Rails Level 2] Ground up

    1. Rails commends line: Example: rails new blog --skip-test-unit --database=postgresql

  4. [转] Nginx模块开发入门

    前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...

  5. Java设计模式04:常用设计模式之建造者模式(创建型模式)

    1. Java之建造者模式(Builder Pattern) (1)概念:       将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [ 构建与表示分离, 同构建不同表示 ] ...

  6. Win10中英文的切换

    在UAP中,涉及到中英文版本切换,在string目录下面添加资源str 读取的时候 new Windows.ApplicationModel.Resources.ResourceLoader().Ge ...

  7. HDU5317

    题意:定义一个数K,最小质因数形式为K = a*b*c形式(如12 = 2*2*3),相同只取一个(所以12只能取2,3两个,既F[12]=2)给L,R区间,找出区间内最大的F[x](L<=x& ...

  8. 第二部分面向对像基础第五章Strng类中方法的使用

    package com.java.oop.day2; import java.util.Calendar; import java.util.Formatter; import java.util.L ...

  9. (转)dedecms入门

    学dedecms一段时间了,把我的入门体会和大家分享一下. 什么是dedecm cms(内容管理系统):现在有各种内容模型,如书评(包括书名,出版社,评论等字段).cms一般有用户后台,网页的用户可以 ...

  10. oracle系统包——dbms job用法(oracle定时任务)

    用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...