android的pull解析

Pull 解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如: 开始元素和结束元素事件,使用 parser.next() 可以进入下一个元素并触发相应事件。跟 SAX 不同的 是, Pull 解析器产生的事件是一个数字,而非方法,因此可以使用一个 switch 对感兴趣的事件 进行处理。当元素开始解析时,调用 parser.nextText() 方法可以获取下一个 Text 类型节点的值。

例如解析:person.xml放到src目录下可以使用类装载器载入文件
首先根据xml文件的内容写一个person javabean 和xmlserver 的业务bean
以下是xmlserveryewbean 的解释:
因为xml的person节点有很多个所以方法的返回类型是一个集合(List<Person>)
方法:public List<Person> getPersons(InputStream xml) throws Exception
1,首先需要一个pull解析器:android自带的方法获取一个解析器 XmlPullParser parser=Xml.newPullParser();
2,以流的形式将xml文件载入 parser.setInput(xml,"utf-8");
3,开始解析
<?xml version="1.0" encoding="UTF-8"?>是文档开始
所以:int event=parser.getEvenType(); 
根据判断event的结果 而作出不同的动作 看主要代码:
  
public static List<Person> getPersons(InputStream xml)throws Exception{
		List<Person> persons=null;
		Person person=null;
		XmlPullParser parser=Xml.newPullParser();
		parser.setInput(xml, "UTF-8");
		int event=parser.getEventType();
		while(event!= XmlPullParser.END_DOCUMENT){
			
			switch(event){
			case XmlPullParser.START_DOCUMENT:
				persons=new ArrayList<Person>();
				break;
			case XmlPullParser.START_TAG:
				if("person".equals(parser.getName())){
					
					Integer personId=new Integer(parser.getAttributeValue(0));
					person=new Person();
					person.setId(personId);
				}else if("name".equals(parser.getName())){
					String personName=parser.nextText();
					person.setName(personName);
				}else if("age".equals(parser.getName()))
					
					person.setAge(new Short(parser.nextText()));
				
				break;
			case XmlPullParser.END_TAG:	
				if("person".equals(parser.getName())){
					persons.add(person);
					person=null;
			
				}
				break;	
			}

			event=parser.next();
	
		}
		
		return persons;
	}
 解析一下:XmlPullParser.START_DOCUMENT表示开始文档事件
XmlPullParser.START_TAG: 开始标签
XmlPullParser.END_TAG:结束标签
parser.getName()获取节点的名称
parser.nextText();获取下一个text类型的节点
parser.getAttributeValue(0));获取属性值
event=parser.next();继续下一个元素

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