android 中解析XML的方法(转)
在XML解析和使用原始XML资源中都涉及过对XML的解析,之前使用的是 DOM4J和 XmlResourceParser 来解析的。本文中将使用XmlPullParser来解析,分别解析不同复杂度的test1.xml、test2.xml、test3.xml。代码如下:
MainActivity:
package com.home.xmlparsetest; import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.app.Activity;
import android.os.Bundle;
import android.util.Xml;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ExpandableListView; public class MainActivity extends Activity implements OnClickListener {
private Button parseBtn1;
private Button parseBtn2;
private Button parseBtn3;
private ExpandableListView listView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initWidget();
} private void initWidget() {
parseBtn1 = (Button) findViewById(R.id.main_btn_test1);
parseBtn1.setOnClickListener(this);
parseBtn2 = (Button) findViewById(R.id.main_btn_test2);
parseBtn2.setOnClickListener(this);
parseBtn3 = (Button) findViewById(R.id.main_btn_test3);
parseBtn3.setOnClickListener(this);
listView = (ExpandableListView) findViewById(R.id.list);
} @Override
public void onClick(View v) {
if (v == parseBtn1) {
InputStream is = getAssetsStream("test1.xml");
List<ClassBean> list = parseFile1(is);
listView.setAdapter(new MyAdapter(this, list));
} else if (v == parseBtn2) {
InputStream is = getAssetsStream("test2.xml");
List<ClassBean> list = parseFile2(is);
listView.setAdapter(new MyAdapter(this, list));
} else if (v == parseBtn3) {
InputStream is = getAssetsStream("test3.xml");
List<ClassBean> list = parseFile3(is);
listView.setAdapter(new MyAdapter(this, list));
}
} /**
* 得到Assets里面相应的文件流
*
* @param fileName
* @return
*/
private InputStream getAssetsStream(String fileName) {
InputStream is = null;
try {
is = getAssets().open(fileName);
} catch (IOException e) {
e.printStackTrace();
}
return is;
} /**
* 解析test1.xml
*
* @param is
* @return list
*/
private List<ClassBean> parseFile1(InputStream is) {
List<ClassBean> list = new ArrayList<ClassBean>();
try {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "utf-8");
int event = parser.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if ("class".equals(parser.getName())) {
ClassBean bean = new ClassBean();
bean.setId(parser.getAttributeValue(0));
bean.setName(parser.nextText());
list.add(bean);
}
break;
}
event = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
} /**
* 解析test2.xml
*
* @param is
* @return list
*/
private List<ClassBean> parseFile2(InputStream is) {
List<ClassBean> list = null;
ClassBean bean = null;
List<StudentBean> sList = null;
StudentBean be = null;
try {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "utf-8");
int event = parser.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<ClassBean>();
break;
case XmlPullParser.START_TAG:
if ("class".equals(parser.getName())) {
bean = new ClassBean();
bean.setId(parser.getAttributeValue(0));
bean.setName(parser.getAttributeValue(1));
sList = new ArrayList<StudentBean>();
} else if ("student".equals(parser.getName())) {
be = new StudentBean();
be.setId(parser.getAttributeValue(0));
be.setName(parser.nextText());
sList.add(be);
}
break;
case XmlPullParser.END_TAG:
if ("class".equals(parser.getName())) {
bean.setList(sList);
list.add(bean);
bean = null;
}
break;
}
event = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
} /**
* 解析test3.xml
*
* @param is
* @return list
*/
private List<ClassBean> parseFile3(InputStream is) {
List<ClassBean> list = null;
ClassBean bean = null;
List<StudentBean> sList = null;
StudentBean be = null;
try {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "utf-8");
int event = parser.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<ClassBean>();
break;
case XmlPullParser.START_TAG:
if ("class".equals(parser.getName())) {
bean = new ClassBean();
bean.setId(parser.getAttributeValue(0));
bean.setName(parser.getAttributeValue(1));
sList = new ArrayList<StudentBean>();
} else if ("student".equals(parser.getName())) {
be = new StudentBean();
be.setId(parser.getAttributeValue(0));
sList.add(be);
} else if ("name".equals(parser.getName())) {
be.setName(parser.nextText());
} else if ("sex".equals(parser.getName())) {
be.setSex(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
if ("class".equals(parser.getName())) {
bean.setList(sList);
list.add(bean);
bean = null;
}
break;
}
event = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
MyAdapter:
package com.home.xmlparsetest; import java.util.List;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.LinearLayout;
import android.widget.TextView; public class MyAdapter extends BaseExpandableListAdapter {
private List<ClassBean> classList;
private Context context; public MyAdapter(Context context, List<ClassBean> classList) {
this.context = context;
this.classList = classList;
} @Override
public Object getChild(int groupPosition, int childPosition) {
List<StudentBean> sList = classList.get(groupPosition).getList();
StudentBean be = null;
if (sList != null) {
be = sList.get(childPosition);
}
return be;
} @Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
} @Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
LinearLayout ll = new LinearLayout(context);
ll.setOrientation(LinearLayout.HORIZONTAL);
List<StudentBean> sList = classList.get(groupPosition).getList(); if (sList != null && sList.size() > 0
&& sList.get(childPosition).getId() != null) {
TextView tv1 = getTextView2();
tv1.setText(sList.get(childPosition).getId());
ll.addView(tv1);
} if (sList != null && sList.size() > 0
&& sList.get(childPosition).getName() != null) {
TextView tv2 = getTextView2();
tv2.setText(sList.get(childPosition).getName());
ll.addView(tv2);
} if (sList != null && sList.size() > 0
&& sList.get(childPosition).getSex() != null) {
TextView tv3 = getTextView2();
tv3.setText(sList.get(childPosition).getSex());
ll.addView(tv3);
}
return ll;
} @Override
public int getChildrenCount(int groupPosition) {
int size = 0;
List<StudentBean> sList = classList.get(groupPosition).getList();
if (sList != null) {
size = sList.size();
}
return size;
} @Override
public Object getGroup(int groupPosition) {
return classList.get(groupPosition);
} @Override
public int getGroupCount() {
return classList.size();
} @Override
public long getGroupId(int groupPosition) {
return groupPosition;
} @Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
LinearLayout ll = new LinearLayout(context);
ll.setOrientation(LinearLayout.HORIZONTAL);
TextView tv1 = getTextView1();
tv1.setText(classList.get(groupPosition).getId());
ll.addView(tv1); TextView tv2 = getTextView1();
tv2.setText(classList.get(groupPosition).getName());
ll.addView(tv2);
return ll;
} @Override
public boolean hasStableIds() {
return true;
} @Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
} private TextView getTextView1() {
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lp.setMargins(0, 0, 20, 0);
TextView tv = new TextView(context);
tv.setLayoutParams(lp);
tv.setGravity(Gravity.CENTER_VERTICAL);
tv.setPadding(36, 0, 0, 0);
tv.setTextSize(25);
return tv;
} private TextView getTextView2() {
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lp.setMargins(20, 0, 50, 0);
TextView tv = new TextView(context);
tv.setLayoutParams(lp);
tv.setGravity(Gravity.CENTER_VERTICAL);
tv.setPadding(36, 0, 0, 0);
tv.setTextSize(18);
return tv;
}
}
ClassBean实体类:
package com.home.xmlparsetest;
import java.util.List;
public class ClassBean {
private String id;
private String name;
private List<StudentBean> list;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<StudentBean> getList() {
return list;
}
public void setList(List<StudentBean> list) {
this.list = list;
}
}
StudentBean:
package com.home.xmlparsetest;
public class StudentBean {
private String id;
private String name;
private String sex;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
布局文件main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" > <Button
android:id="@+id/main_btn_test1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="解析test1" /> <Button
android:id="@+id/main_btn_test2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="解析test2" /> <Button
android:id="@+id/main_btn_test3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="解析test3" />
</LinearLayout> <ExpandableListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ExpandableListView> </LinearLayout>
assets里面的test1.xml:
<?xml version="1.0" encoding="utf-8"?>
<classList> <class id="1">一班</class> <class id="2">二班</class> <class id="3">三班</class> <class id="4">四班</class> </classList>
assets里面的test2.xml:
<?xml version="1.0" encoding="utf-8"?>
<classList> <class id="1" name="一班" >
<student id="1" >张三 </student>
<student id="2" >李四 </student>
</class> <class id="2" name="二班" >
<student id="3" >王五</student>
<student id="4" >赵六</student>
</class> <class id="3" name="三班" >
<student id="5" >小明</student>
<student id="6" >小高 </student>
</class> <class id="4" name="四班" >
<student id="7" >小花</student>
<student id="8" >小红 </student>
</class> </classList>
assets里面的test3.xml:
<?xml version="1.0" encoding="utf-8"?>
<classList> <class id="1" name="一班" >
<student id="1" >
<name>张三</name>
<sex>男</sex>
</student>
<student id="2" >
<name>李四</name>
<sex>男</sex>
</student>
</class> <class id="2" name="二班" >
<student id="3" >
<name>王五</name>
<sex>男</sex>
</student>
<student id="4" >
<name>赵六</name>
<sex>男</sex>
</student>
</class> <class id="3" name="三班" >
<student id="5" >
<name>小明</name>
<sex>男</sex>
</student>
<student id="6" >
<name>小高</name>
<sex>男</sex>
</student>
</class> <class id="4" name="四班" >
<student id="7" >
<name>小花</name>
<sex>女</sex>
</student>
<student id="8" >
<name>小红</name>
<sex>女</sex>
</student>
</class> </classList>
http://www.tuicool.com/articles/EZrqEb
android 中解析XML的方法(转)的更多相关文章
- Android中解析XML的方法
假设我要解析如下的XML文件: <?xml version="1.0" encoding="UTF-8"?> <books> <b ...
- Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
- [置顶] Android学习系列-Android中解析xml(7)
Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件. ...
- Android中解析XML
XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...
- android中解析文件的三种方式
android中解析文件的三种方式 好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...
- Android DOM解析XML方法及优化
在Android应用开发中,我们常常要在应用启动后从服务器下载一些配置文件,这些配置文件包含一些项目中可能用到的资源,这些文件很多情况下是XML文件,这时就要将XML下载到文件中保存,之后再解析XML ...
- 用 ElementTree 在 Python 中解析 XML
用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...
- 【转】Android中JNI的使用方法
Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...
- 修改Android中strings.xml文件, 动态改变数据
有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...
随机推荐
- Libevent详细说明
文章来自官方文档的部分翻译:http://www.wangafu.net/~nickm/libevent-book/ 通过这部分的了解,基本上可以使用libevent的常用功能了.有时间建议直接看官方 ...
- poj 2425 A Chess Game 博弈论
思路:SG函数应用!! 代码如下: #include<iostream> #include<cstdio> #include<cmath> #include< ...
- 初学Ajax(二)
$.get()和$.post() .load()方法是局部方法,因为它需要一个包含元素的jQuery对象作为前缀.而$.get()和$.post()是全局方法,无须指定某个元素.对于用途而言,.loa ...
- 重温《js权威指南》 第2-3章
第二章 语法结构 2.1 js区分大小写,html不区分大小写 2.5 注意分号,如果没有分号,解释器会试图解析js,并在不能解析的地方加分号 第三章 值和变量 ...
- 《jQuery风暴》第2章 必须知道的JavaScript知识
第2章 必须知道的JavaScript知识 JavaScript是jQuery应用的基础,掌握JavaScript这门语言是使用jQuery的基础条件.本章不会全面细致的讲解JavaScript的全部 ...
- Struts2笔记——自定义拦截器
需要两个步骤,自定义类实现拦截器接口和在struts.xml注册拦截器 =============================== 1.自定义类实现com.opensymphony.xwork2. ...
- Struts2笔记——第一个实例HelloWorld
1.创建新的Dynamic Web项目 ------------------------------------------ 2.struts2框架配置 ------------------- ...
- iOS keyChain
keychain在ios中是保存在sqlite数据库中的. 这个数据库文件的位置: 真机: /private/var/Keychains/keychain-2.db 虚拟机: /Users/USER- ...
- JBOSS集群技术升级版解决方案分享(图示篇)
JBOSS集群技术升级版解决方案分享(实现篇) 前段时间,由于阿堂一直较忙,没有写点什么了,有空时一直在关注"web架构和性能,高并发,Cache层"技术领域的 ...
- SQL Server下实现利用SQL Server Agent Job对索引重建实现Balance Load
昨天工作中遇到这样一个场景,有个项目需要把某台服务器下所有的表和索引都启用数据压缩(data_compression=page),已经启用了的表和索引就不需要再压缩一次了.统计一下后发现要运行的REB ...