在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的方法(转)的更多相关文章

  1. Android中解析XML的方法

    假设我要解析如下的XML文件: <?xml version="1.0" encoding="UTF-8"?> <books> <b ...

  2. Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

  3. [置顶] Android学习系列-Android中解析xml(7)

    Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件.   ...

  4. Android中解析XML

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

  5. android中解析文件的三种方式

    android中解析文件的三种方式     好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...

  6. Android DOM解析XML方法及优化

    在Android应用开发中,我们常常要在应用启动后从服务器下载一些配置文件,这些配置文件包含一些项目中可能用到的资源,这些文件很多情况下是XML文件,这时就要将XML下载到文件中保存,之后再解析XML ...

  7. 用 ElementTree 在 Python 中解析 XML

    用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...

  8. 【转】Android中JNI的使用方法

    Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...

  9. 修改Android中strings.xml文件, 动态改变数据

    有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...

随机推荐

  1. iOS第三方(ActionSheet)-JTSActionSheet

    外观和系统的基本一样 github地址:https://github.com/jaredsinclair/JTSActionSheet 百度云下载: http://pan.baidu.com/s/1q ...

  2. MySQL数据库优化总结

    对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要.一般来说,要保证数据库的效率,要做好以下四个方面的工作:数 据库设计.sql语句优化.数据库参数配置.恰当的硬件资 ...

  3. OAuth 2 的简单理解

    什么是 OAuth 2.0 根据 oauth.net 的描述,我们可以将它简述为以下内容:OAuth 2.0 是 OAuth 1.0 框架协议的升级版本,简化了多种平台上身份及授权认证的流程. 具体的 ...

  4. java重构、重载、重写

    重构:就是代码优化,或则你可以理解为代码的修改!            例:开始你的类名是A现在要改为B也称为重构的一种 重载:发生在同一类中,方法名相同,参数列表不同 重写:发生在父子类中,子类中有 ...

  5. jmeter线程组之间传递参数

    JMeter 变量作用域局限于所属线程.这样设计是经过深思熟虑的,目的是让测试线程能够独立运转.有时候用户可能需要在不同线程间(可能属于同一个线程组,也可能不属于同一个线程组)传递变量. 其中一种方法 ...

  6. SendTextMessage如何打开记事本并显示指定内容

    procedure TForm1.Button1Click(Sender: TObject); var hEdit: HWND; str: string; begin str := '准备要添加到记事 ...

  7. Hibernate笔记——C3P0配置

    Hibernate作为持久层(ORM)框架,操作数据库,自然也就离不开数据库连接池了.其支持多种连接池,这里就用最熟悉的C3P0连接池. C3P0连接池前面已经介绍了并使用很多次了就不再详细说明了. ...

  8. module.xml 快捷代码

    以下内容为淘宝装修模块描述文件(module.xml)快捷代码块,可以快速调整模块信息,详解请查阅>> http://open.taobao.com/doc/detail.htm?id=1 ...

  9. MyBatis主键返回

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能. 比如在表的关联关系中,将数据插入主 ...

  10. CentOS下支持exFAT与NTFS

    exFAT: 1.下载fuse-exfat支持软件: exfat支持是通过fuse模块的方式支持的,其项目地址是: https://code.google.com/p/exfat/ ,当前版本是:1. ...