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 ...
随机推荐
- css倒三角的几种实现方式
在网页中,你在很多地方都能看到倒三角,比如tooltips,下拉菜单等.大家有几种方式来实现呢? 1.BASE64编码 图片 假如你已经有了三角形的图片,并且减少HTTP请求,那么将这个图片转换成一个 ...
- spring mvc使用ClassPathXmlApplicationContext或FileSystemXmlApplicationContext和XmlWebApplicationContext类的操作其中 XmlWebApplicationContext是专为Web工程定制的。
一.简单的用ApplicationContext做测试的话,获得Spring中定义的Bean实例(对象).可以用: ApplicationContext ac = new ClassPathXmlAp ...
- Flashback Query、Flashback Table(快速闪回查询、快速闪回表)
Flashback Query闪回查询 flashback query是基于undo表空间的闪回,与之相关的参数如下: SQL> show parameter undo NAME ...
- springMVC3学习(二)--ModelAndView对象
当控制器处理完请求时,一般会将包括视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet. 因此,常常须要在控制器中构造ModelAndView对象. ...
- 18、MySQL内存体系架构及参数总结
内存结构: Mysql 内存分配规则是:用多少给多少,最高到配置的值,不是立即分配 图只做大概参考 全局缓存包括: global buffer(全局内存分配总和) = innodb_buffer ...
- Reso | liunx下longeneQQ和搜狗拼音
sogoupinyin_2.0.0.0078_amd64.deb: http://pan.baidu.com/s/1eSDLvEU WineQQ7.8-20151109-Longene .deb: ...
- iOS 10 个实用小技巧(总有你不知道的和你会用到的)
在开发过程中我们总会遇到各种各样的小问题,有些小问题并不是十分容易解决.在此我就总结一下,我在开发中遇到的各种小问题,以及我的解决方法.比较普遍的我就不再提了,这里主要讲一些你可能不知道的(当然,也有 ...
- Camera2Raw
This sample demonstrates how to use the Camera2 API to capture RAW camera buffers and save them as D ...
- Android(java)学习笔记248:ContentProvider使用之虚拟短信
1.虚拟短信应用场景: 急着脱身?应付老婆(老公.男女朋友查岗)? 使用虚拟通话短信吧.您只需通过简单设置,软件就会在指定时间会模拟一个“真实”来电或短信来迷惑对方,通过“真实”的证据让对方相 ...
- HTML5 离线缓存详解(转)
离线缓存是html5新特性之一,简单理解就是第一次加载后将数据缓存,在没有清除缓存前提下,下一次没有网络也可以加载,用在静态数据的网页或游戏比较好用.当然,Html5新的特性都不是所有浏览器都能支持的 ...