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 ...
随机推荐
- HDU 4493 Tutor(精度处理)
题目 #include<stdio.h> int main() { int t; double a,s; scanf("%d",&t); while(t--) ...
- SGU 107
107. 987654321 problem time limit per test: 0.25 sec. memory limit per test: 4096 KB For given numbe ...
- LoaderManager使用详解(二)---了解LoaderManager
了解LoaderManager 这篇文章将介绍LoaderManager类,这是该系列的第二篇文章. 一:Loaders之前世界 二:了解LoaderManager 三:实现Loaders 四:实 ...
- QTP10补丁汇总
QTP10补丁汇总 QTP_00591.EXE QTP10 调试器视图问题的补丁 QTP_00591 - Prevent QuickTest Debug Viewer Problems when Pr ...
- http://blog.csdn.net/woshiyjk/article/details/7895888
http://blog.csdn.net/woshiyjk/article/details/7895888
- unity 脚本(自定义组件)的事件触发关系
- hdu 1847 Good Luck in CET-4 Everybody!(简单博弈SG)
#include<stdio.h> #include<string.h> #define N 1010 int hash[N]; int sg[N]; void GetSG() ...
- netbeans使用
下载地址 https://netbeans.org/downloads/ https://netbeans.org/downloads/start.html?platform=linux&la ...
- Java学习笔记之:Java 内部类
一.介绍 内部类:存在与类中的类就是内部类,一般用于Android开发. 可以把内部类理解成一种继承关系 1.普通内部类 2.局部内部类 3.静态内部类 4.匿名内部类 二.笔记 1.普通内部类 /* ...
- WordPress插件:幻灯片Meta Slider
在wordpress中添加幻灯片的方法很简单,通过使用Meta Slider就可以简单地给wordpress添加幻灯片. 插件下载>> 安装后启用插件,根据提示创建幻灯片: 设置幻灯片样式 ...