XML PULL模型
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模型的更多相关文章
- XML Pull
java [android]xml new parse tool XML parsing with XML Pull import org.xmlpull.v1.XmlPullParser;
- Android 解析XML—pull解析方式
在Android中,常见的XML解析器分别为SAX解析器.DOM解析器和PULL解析器,其中PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部 ...
- android解析xml (pull)
1. xml <persons> <person id="18"> <name>furong</name> <age>2 ...
- 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 ...
- Nacos配置中心交互模型是 push 还是 pull ?你应该这么回答
本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富- 对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服 ...
- PULL解析XML的运行机制详解
PULL解析简单易上手,基本上看一遍,基本上就会解析啦,但总是感觉对PULL解析的运行机制不是很了解,就总结了以下事件驱动到底是怎么执行的.. PULL: Android内置了PULL解析器.PULL ...
- 非常简单的XML解析(SAX解析、pull解析)
这里只是把解析的数据当日志打出来了 非常简单的xml解析方式 package com.example.demo.service; import java.io.IOException; import ...
- Android解析XML(PULL方式)
PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDocu ...
- [android]解析XML文件的方法有三种:PULL,DOM,SAM
PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDocu ...
随机推荐
- 微信小程序开发手册
目录: 数据绑定 条件渲染 列表渲染 API FAQ: <block wx:for> 和 <view wx:for>的区别 wx:if 什么情况下判断为假 坑列表: 微信版本6 ...
- floyd+动态规划 hdu-4571-Travel in time
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4571 题目大意: 有n个景点,每个点都有个游玩时间ci,游玩后得到的满意度si.给一个起点s和终点e ...
- Java8特性详解 lambda表达式 Stream
1.lambda表达式 Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对理解Lambda表达式有很大帮助,因为Java正 ...
- [转] nginx+FastCGI+c++
from: http://www.cnblogs.com/xiaouisme/archive/2012/08/01/2618398.html 一 安装 目的:不需支持php等.就html就行了.步骤: ...
- Java基础知识强化之IO流笔记11:递归之递归概述和注意事项
1. 递归: 方法定义中调用方法本身的现象. e.g: public void show(int n ) { if(n <= 0) { System.exit(0); } System.out. ...
- POJ 2891 扩展欧几里德
这个题乍一看跟剩余定理似的,但是它不满足两两互素的条件,所以不能用剩余定理,也是给了一组同余方程,找出一个X满足这些方程,如果找不到的话就输出-1 因为它不满足互素的条件,所以两个两个的合并,最后合成 ...
- call, apply, bind作用
call, apply作用就是(改变方法中的this指向)借用别人的方法来调用,就像调用自己的一样 function Person(name) { this.name = name; } Person ...
- Linux常用操作练习
Linux常用操作练习 练习一:安装CentOS 1.设置为1G内存(才有图形界面).10G硬盘 2.分给交换分区2G(4G一下2G,8G-32G分4G-8G) 练习二:安装CentOS迷你版 1.安 ...
- centos5.2 x86 安装 oracle 11g2r 日志
一.安装centos 二.安装ora所需的库 三.修改centos内核 四.建用户组和目录结构等 五.安装ora11g2r 六.安装sqlplus的翻页程序和help补丁 七.自启动脚本 八.常用命令 ...
- xcode升级插件失效修复
每次xcode升级以后,插件都会失效.可以通过一行命令解决这个问题. 摘自传人的博客 find ~/Library/Application\ Support/Developer/Shared/Xcod ...