android pull解析相关理解
程序员文章站
2022-05-23 08:48:20
...
Pull解析XML
XmlPullParser解析器的运行方式与SAX解析器相似.它提供了类似的事件(开始元素和结束元素),但需要使用parser.next()方法来提取它们.事件将作为数值代码被发送,因此可以根据不同的事件代码值来进行不同的处理.通过parser.getEventType()方法来取得事件的代码值(如XmlPullParser.START_DOCUMENT、XmlPullParser.START_TAG、XmlPullParser.END_TAG).
当处于某个元素时可以调用XmlPullParser的getAttributte()方法来获取属性的值,也可调用它的nextText()获取本节点的值。
具体思路:
*构建PullXmlParser解析器
XmlPullParser parser = Xml.newPullParser();
*将xml文档注册到解析器中
parser.setInput();
*触发事件,获得事件类型码
int event = parser.getEventType();
*针对事件进行具体分析
"name".equals(parser.getName());//判断开始标签元素是否是name
parser.getAttributeValue(0);//得到标签的属性值
parser.nextText();//获取下一个Text节点的值
*触发并进入下一个事件
event = parser.next();
Pull解析和Sax解析不一样的地方有:
(1)pull读取xml文件后触发相应的事件调用方法返回的是数字
(2)pull可以在程序中控制想解析到哪里就可以停止解析。
优点:不是一次加载,中途可以停止
**************pull解析相关代码***************
public class PullparserActivity extends Activity {
private TextView mtextview;
private ListView mlistview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.domparser);
mtextview = (TextView) findViewById(R.id.textView1);
mlistview = (ListView) findViewById(R.id.listView1);
mtextview.setText("pull解析xml");
List<Student> list = parser();
ArrayAdapter<Student> adapter = new ArrayAdapter<Student>(this,
android.R.layout.simple_list_item_1, list);
mlistview.setAdapter(adapter);
}
private List<Student> parser() {
List<Student> list = new ArrayList<Student>();
// 获取pull解析器
XmlPullParser parser = Xml.newPullParser();
try {
// 加载xml文档
parser.setInput(PullparserActivity.this.getClassLoader()
.getResourceAsStream("student.xml"), "utf-8");
// c.触发事件,获得事件类型码
int event = parser.getEventType();
Student student = null;
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:// 文档开始
break;
case XmlPullParser.START_TAG:// 开始标签
if ("student".equals(parser.getName())) {
student = new Student();
student.setId(Integer.valueOf(parser
.getAttributeValue(0)));
}
Log.i("TAG", "infor");
if (student != null) {
if ("name".equals(parser.getName())) {
student.setName(parser.nextText());
} else if ("age".equals(parser.getName())) {
student.setAge(Integer.valueOf(parser
.getAttributeValue(0)));
}
}
break;
case XmlPullParser.END_TAG://結束标签
if ("student".equals(parser.getName())) {
list.add(student);
student = null;
}
Log.i("TAG", "infor");
break;
case XmlPullParser.TEXT:// 文本解析
break;
}
event = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
XmlPullParser解析器的运行方式与SAX解析器相似.它提供了类似的事件(开始元素和结束元素),但需要使用parser.next()方法来提取它们.事件将作为数值代码被发送,因此可以根据不同的事件代码值来进行不同的处理.通过parser.getEventType()方法来取得事件的代码值(如XmlPullParser.START_DOCUMENT、XmlPullParser.START_TAG、XmlPullParser.END_TAG).
当处于某个元素时可以调用XmlPullParser的getAttributte()方法来获取属性的值,也可调用它的nextText()获取本节点的值。
具体思路:
*构建PullXmlParser解析器
XmlPullParser parser = Xml.newPullParser();
*将xml文档注册到解析器中
parser.setInput();
*触发事件,获得事件类型码
int event = parser.getEventType();
*针对事件进行具体分析
"name".equals(parser.getName());//判断开始标签元素是否是name
parser.getAttributeValue(0);//得到标签的属性值
parser.nextText();//获取下一个Text节点的值
*触发并进入下一个事件
event = parser.next();
Pull解析和Sax解析不一样的地方有:
(1)pull读取xml文件后触发相应的事件调用方法返回的是数字
(2)pull可以在程序中控制想解析到哪里就可以停止解析。
优点:不是一次加载,中途可以停止
**************pull解析相关代码***************
public class PullparserActivity extends Activity {
private TextView mtextview;
private ListView mlistview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.domparser);
mtextview = (TextView) findViewById(R.id.textView1);
mlistview = (ListView) findViewById(R.id.listView1);
mtextview.setText("pull解析xml");
List<Student> list = parser();
ArrayAdapter<Student> adapter = new ArrayAdapter<Student>(this,
android.R.layout.simple_list_item_1, list);
mlistview.setAdapter(adapter);
}
private List<Student> parser() {
List<Student> list = new ArrayList<Student>();
// 获取pull解析器
XmlPullParser parser = Xml.newPullParser();
try {
// 加载xml文档
parser.setInput(PullparserActivity.this.getClassLoader()
.getResourceAsStream("student.xml"), "utf-8");
// c.触发事件,获得事件类型码
int event = parser.getEventType();
Student student = null;
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:// 文档开始
break;
case XmlPullParser.START_TAG:// 开始标签
if ("student".equals(parser.getName())) {
student = new Student();
student.setId(Integer.valueOf(parser
.getAttributeValue(0)));
}
Log.i("TAG", "infor");
if (student != null) {
if ("name".equals(parser.getName())) {
student.setName(parser.nextText());
} else if ("age".equals(parser.getName())) {
student.setAge(Integer.valueOf(parser
.getAttributeValue(0)));
}
}
break;
case XmlPullParser.END_TAG://結束标签
if ("student".equals(parser.getName())) {
list.add(student);
student = null;
}
Log.i("TAG", "infor");
break;
case XmlPullParser.TEXT:// 文本解析
break;
}
event = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
上一篇: 创业CEO分享:如何“驾驭”你的投资人
下一篇: pull解析和pull的写入
推荐阅读
-
Android中实现「类方法指令抽取方式」加固方案原理解析
-
荐 【Android】LeakCanary原理解析
-
Android 友盟推送原理解析
-
Android多线程(二)消息处理机制---Handler、Message、Looper源码原理解析
-
【Android 异步操作】Handler 机制 ( Android 提供的 Handler 源码解析 | Handler 构造与消息分发 | MessageQueue 消息队列相关方法 )
-
MySQL慢查询相关参数原理解析
-
Android编程使用pull方式解析xml格式文件的方法详解
-
Android应用程序窗口(Activity,Window,View)原理解析
-
Android开发 自定义底部可滑动浮层控件及原理解析
-
Python‘==‘ 及 ‘is‘相关原理解析