读书人

android-xml资料解析教程

发布时间: 2012-07-19 16:02:20 作者: rapoo

android-xml文件解析教程
? 在讨论群里里面有人在问xml的解析方法,我就弄了个简单的demon来介绍我自己的方法下面的xml文件和读取的效果图

?

<?xml version="1.0" encoding="utf-8"?><tests><test name="test_1">测试1</test><test name="test_2">测试2</test><test name="test_3">测试3</test><test name="test_4">测试4</test><test name="test_5">测试5</test><test name="test_6">测试6</test><test name="test_7">测试7</test><test name="test_8">测试8</test><test name="test_9">测试9</test></tests>


?效果图:

<br><br><img src="http://dl.iteye.com/upload/attachment/557578/f233c0b6-fd25-36a8-8570-9f82b04f2000.png" alt="android-xml资料解析教程"><br>?主要代码




package com.wjh.xmldemon;import java.util.ArrayList;import org.xmlpull.v1.XmlPullParser;import android.app.Activity;import android.content.Context;import android.content.res.XmlResourceParser;import android.os.Bundle;import android.widget.TextView;public class XmlDemonActivity extends Activity {    /** Called when the activity is first created. */TextView tv = null;ArrayList<Test> list = null;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        tv =(TextView)findViewById(R.id.tv);        list = getXmlData(this, R.xml.test);        initData();    }    //初始化数据    private void initData()    {    StringBuffer sb = new StringBuffer();    int size = list.size();    for(int i = 0;i<size;i++)    {    Test test = list.get(i);    sb.append("name="+test.getName());    sb.append("|");    sb.append("text="+test.getText());    sb.append("\n");    }    tv.setText(sb.toString());    }    //获得xml文件数据,并放回一个list    public  ArrayList<Test> getXmlData(Context context,int id)    {    ArrayList<Test> list = new ArrayList<Test>();  try {  //打开文档XmlResourceParser xml = context.getResources().getXml(id);int eventType = xml.next();try {        // 切换到下一个状态,并获得当前状态的类型Test test = null;        while ( true )         {                if(test == null)        {        test = new Test();        }           // 文档开始状态           if (eventType == XmlPullParser. START_DOCUMENT )            {           }           // 标签开始状态           else if (eventType == XmlPullParser. START_TAG )            {              // 将标签名称和当前标签的深度(根节点的 depth 是 1 ,第 2 层节点的 depth 是 2 ,类推)              switch (xml.getDepth())              {              case 1:                 break ;              case 2:              //获得属性name的值              /*               * <tests><test name="test_1">测试1</test> </tests>               */              //从上面可以看出test在tests下面,也是深度为2             test.setName(xml.getAttributeValue(null,"name"));              break;              }           }           // 读取标签内容状态           else if (eventType == XmlPullParser. TEXT )            {           //<test name="test_1">测试1</test>获得标签中的数据           String str = xml.getText();           if(str!=null&&!str.equals(""))           {           test.setText(str);           list.add(test);           test = null;           }           }           else if (eventType == XmlPullParser. END_TAG )            {           //结束标签           }           // 文档结束状态           else if (eventType == XmlPullParser. END_DOCUMENT )            {              // 文档分析结束后,退出 while 循环              break ;           }           // 切换到下一个状态,并获得当前状态的类型           eventType = xml.next();         }     } catch (Exception e) {        e.printStackTrace();     }        } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}  return list;    }    //Test类    class Test    {    private String name;//name属性    private String text;//内容    public String getName() {return name;}public void setName(String name) {this.name = name;}public String getText() {return text;}public void setText(String text) {this.text = text;}    }}

?代码包:<br>?xmlDemon.rar

读书人网 >XML SOAP

热点推荐