首页 > 程序开发 > 移动开发 > Android >

android-xml文件解析教程

2011-09-21

在讨论群里里面有人在问xml的解析方法,我就弄了个简单的demon来介绍我自己的方法下面的xml文件和读取的效果图Xml代码<?xml version="1.0" encoding="utf-8"?><tests> <test name="test_1">测试1</test> <t...

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

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://up.2cto.com/2011/0921/20110921013025587.png" alt=""><br> 主要代码


Java代码
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&amp;&amp;!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 block
e.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;
}

}
}

作者“汉堡的博客”

相关文章
最新文章
热点推荐