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 ...
随机推荐
- vc++ 获取当前用户名
#include<afxwin.h> #include <stdio.h> int main(void) { char userName[MAX_PATH]; unsigned ...
- acdream1116 Gao the string!(hash二分 or 后缀数组)
问题套了一个斐波那契数,归根结底就是要求对于所有后缀s[i...n-1],所有前缀在其中出现的总次数.我一开始做的时候想了好久,后来看了别人的解法才恍然大悟.对于一个后缀来说 s[i...n-1]来说 ...
- [你必须知道的.NET]第三十五回,判断dll是debug还是release,这是个问题
发布日期:2009.12.29 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 问题的提出 晚上翻着群里的聊天,发现一个有趣的问题:如何通过编码 ...
- (3)初次接触off
boss布置任务了,要读入off文件,生成能显示出来的可执行文件,完成不了就要滚蛋 目前的东西还是不用保密的,到后面我就要设密码了 好,.off文件是什么? OFF,Object File Forma ...
- 最近工作用到的sql脚本
USE MadeInChina DUMP TRANSACTION MadeInChina WITH NO_LOG --清除日志 BACKUP LOG MadeInChina WITH NO_LOG B ...
- python流程控制语句 ifelse - 4
嵌套 #! /usr/bin/python a = int(input ("请输入一个整数:")) : : print ("无法显示") else : prin ...
- DWR与AJAX
DWR与AJAX的微妙关系 2015-08-14 10:20 447人阅读 评论(0) 收藏 举报 本文章已收录于: // ' + obj.name + " "; html ...
- oracle服务、客户端 plsql配置
1.oracle服务端安装 Oracle 9i 的安装(图解) 2.oracle客户端安装 http://wenku.baidu.com/view/8be28581f524ccbff0218427.h ...
- 练习用php做表格
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Windows API 进程状态信息函数
这里的进程状态信息函数主要分为两类,一类是PS(PROCESS STATUS HELPER) API,另外一类是Th(TOOL HELP) API. 话说第一次遇到这个ToolHelp函数时我在看&l ...