Android SAX解析XML文件

SAXPersonService.java

  1. import java.io.InputStream; 
  2. import java.util.ArrayList; 
  3. import java.util.List; 
  4.  
  5. import javax.xml.parsers.SAXParser; 
  6. import javax.xml.parsers.SAXParserFactory; 
  7.  
  8. import org.xml.sax.Attributes; 
  9. import org.xml.sax.SAXException; 
  10. import org.xml.sax.helpers.DefaultHandler; 
  11.  
  12. import cn.itcast.domain.Person; 
  13. /**
  14. * 采用SAX解析XML内容
  15. */ 
  16. public class SAXPersonService { 
  17.      
  18.     public List<Person> getPersons(InputStream inStream) throws Throwable{ 
  19.         SAXParserFactory factory = SAXParserFactory.newInstance(); 
  20.         SAXParser parser = factory.newSAXParser(); 
  21.         PersonParser personParser = new PersonParser(); 
  22.         parser.parse(inStream, personParser); 
  23.         inStream.close(); 
  24.         return personParser.getPersons(); 
  25.     } 
  26.  
  27.     private final class PersonParser extends DefaultHandler{ 
  28.         private List<Person> persons = null
  29.         private String tag = null
  30.         private Person person = null
  31.  
  32.         public List<Person> getPersons() { 
  33.             return persons; 
  34.         } 
  35.  
  36.         @Override 
  37.         public void startDocument() throws SAXException { 
  38.             persons = new ArrayList<Person>(); 
  39.         } 
  40.          
  41.         @Override 
  42.         public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
  43.             if("person".equals(localName)){ 
  44.                 person = new Person(); 
  45.                 person.setId(new Integer(attributes.getValue(0))); 
  46.             } 
  47.             tag = localName; 
  48.         } 
  49.          
  50.         @Override 
  51.         public void characters(char[] ch, int start, int length) 
  52.                 throws SAXException { 
  53.             if(tag!=null){ 
  54.                 String data = new String(ch, start, length);//获取文本节点的数据 
  55.                 if("name".equals(tag)){ 
  56.                     person.setName(data); 
  57.                 }else if("age".equals(tag)){ 
  58.                     person.setAge(new Short(data)); 
  59.                 } 
  60.             } 
  61.         } 
  62.  
  63.         @Override 
  64.         public void endElement(String uri, String localName, String qName) 
  65.                 throws SAXException { 
  66.             if("person".equals(localName)){ 
  67.                 persons.add(person); 
  68.                 person = null
  69.             } 
  70.             tag = null
  71.         } 
  72.     } 
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

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

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import cn.itcast.domain.Person;
/**
 * 采用SAX解析XML内容
 */
public class SAXPersonService {
	
	public List<Person> getPersons(InputStream inStream) throws Throwable{
		SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser parser = factory.newSAXParser();
		PersonParser personParser = new PersonParser();
		parser.parse(inStream, personParser);
		inStream.close();
		return personParser.getPersons();
	}

	private final class PersonParser extends DefaultHandler{
		private List<Person> persons = null;
		private String tag = null;
		private Person person = null;

		public List<Person> getPersons() {
			return persons;
		}

		@Override
		public void startDocument() throws SAXException {
			persons = new ArrayList<Person>();
		}
		
		@Override
		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
			if("person".equals(localName)){
				person = new Person();
				person.setId(new Integer(attributes.getValue(0)));
			}
			tag = localName;
		}
		
		@Override
		public void characters(char[] ch, int start, int length)
				throws SAXException {
			if(tag!=null){
				String data = new String(ch, start, length);//获取文本节点的数据
				if("name".equals(tag)){
					person.setName(data);
				}else if("age".equals(tag)){
					person.setAge(new Short(data));
				}
			}
		}

		@Override
		public void endElement(String uri, String localName, String qName)
				throws SAXException {
			if("person".equals(localName)){
				persons.add(person);
				person = null;
			}
			tag = null;
		}
	}
}

测试类PersonServiceTest.java

  1. import java.io.BufferedWriter; 
  2. import java.io.File; 
  3. import java.io.FileOutputStream; 
  4. import java.io.InputStream; 
  5. import java.io.OutputStreamWriter; 
  6. import java.io.StringWriter; 
  7. import java.util.ArrayList; 
  8. import java.util.List; 
  9.  
  10. import cn.itcast.domain.Person; 
  11. import cn.itcast.service.SAXPersonService; 
  12. import android.content.Context; 
  13. import android.test.AndroidTestCase; 
  14. import android.util.Log; 
  15.  
  16. public class PersonServiceTest extends AndroidTestCase { 
  17.     private static final String TAG = "PersonServiceTest"
  18.  
  19.     public void testSAXGetPersons() throws Throwable{ 
  20.         SAXPersonService service = new SAXPersonService(); 
  21.         InputStream inStream = getClass().getClassLoader().getResourceAsStream 
  22.  
  23. ("itcast.xml"); 
  24.         List<Person> persons = service.getPersons(inStream); 
  25.         for(Person person : persons){ 
  26.             Log.i(TAG, person.toString());     
  27.         } 
  28.     } 
  29.      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值