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=""><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&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;
		}
		
    }
}

 代码包:<br>  xmlDemon.rar

你可能感兴趣的:(java,xml,android,ITeye)