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的结果 而作出不同的动作 看主要代码:
  java代码
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; 
    } 
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();继续下一个元素
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值