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>
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;} }}