android使用sax解析xml

随着技术的发展,现在的web已经和以前不同了。web已经逐渐像移动的方向倾斜,作为程序员的确应该拓展一下自己的知识层面。学习各方面的知识,今天就接着前几天的弄一下android的xml解析,这次就使用sax的方式解析xml.下面就一步一步的来做吧。

1.编写一个简单的xml



  
     will
     21
  
  
     will2
     22
  


 

2.编写pojo类

package org.lxh.vo;

public class Person {
	
	private String id;
	private String name;
	private int age;

	

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}
}


3.写一个解析xml的类

package org.lxh.impl;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.lxh.vo.Person;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.util.Log;

public class Parse {
	public List findAll(InputStream in) throws Exception {

		SAXParserFactory factory = SAXParserFactory.newInstance(); //创建解析工厂
		SAXParser parser = factory.newSAXParser();
		ParsePerson chuli = new ParsePerson();
		parser.parse(in, chuli);
		in.close(); //关闭输入流
		return chuli.getData();
	}
    //开始解析xml
	public class ParsePerson extends DefaultHandler {
		List all = null;
		Person person = null;
		String flag = null;

		public List getData() {
			return all;
		}

		public void startDocument() throws SAXException {

			all = new ArrayList();  //实例化集合
		}

		public void startElement(String uri, String localName, String qName,
				Attributes attributes) throws SAXException {
			if ("person".equals(localName)) {  
				person = new Person();
				person.setId(attributes.getValue(0)); //取得id的内容
			}
			flag = localName;  //记录上一个element
		}

		public void characters(char[] ch, int start, int length)
				throws SAXException {

			if (flag != null) {  //这样做取得的值就不会重复
				String data = new String(ch, start, length);

				if ("name".equals(flag)) {

					person.setName(data);
				}
				else if ("age".equals(flag)) {

					person.setAge(Integer.parseInt(data));
				}
			}
		}

		public void endElement(String uri, String localName, String qName)
				throws SAXException {

			if ("person".equals(localName)) {
				all.add(person);
				person = null;
			}
			flag = null;
		}

	}
}

 

4.进行单元测试


 




    
       
        
            
                
                
            
        

    
    
    
    
   
 


 

package org.lxh.activity;

import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

import org.lxh.impl.Parse;
import org.lxh.vo.Person;

import android.test.AndroidTestCase;
import android.util.Log;

public class Test extends AndroidTestCase{
	public static final String tag="Test";
  public void testShuchu() throws Throwable{
	  //Log.i(tag, "123");
	  Parse p=new Parse();
	  InputStream in=getClass().getClassLoader().getResourceAsStream("persons.xml");
	
	 
		List all=p.findAll(in);
		  Log.i(tag, String.valueOf(all.size()));
		Iterator it=all.iterator();
		while(it.hasNext()){
			Person person=it.next();
			
			Log.i(tag, person.toString());
		}
		
	
  }
}


 

最后来看一下运行效果图,这里最好弄个filter,控制台就没那么乱了。

点击那个绿色的加号就OK了

不知道大家有没有不理解的地方,如果有可以写评论给我。

 

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