zoukankan      html  css  js  c++  java
  • 核心技术篇:5.android网络编程之pull解析xml

    android网络编程之pull解析xml

      除了前面介绍过的SAX以及DOM方法,还可以通过Pull对xml文档进行一个解析。Pull解析器的解析方式与SAX非常相似。它提供了类似的事件,使用parser.next()可以进入下一元素并触发相应事件,事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行选择,然后进行相应的处理,调用parser.nextText()方法可以获取下一个Text类型元素的值。

      pull解析器特点:

        *结构简单:一个接口、一个例外、一个工厂就组成了Pull解析器

        *简单易用:只有5个事件:

          1.START_DOCUMENT--->开始解析事件

          2.START_TAG--->开始元素

          3.END_TAG--->结束元素

          4.TEXT--->解析文本

          5.END_DOCUMENT--->结束解析事件

      直接看代码:
    public class PullPersonParse {
                      /**
    	 * 使用pull技术解析xml
    	 * @param inStream
    	 * @return
    	 * @throws Throwable
    	 */
    	public static ArrayList<Person> pullParsePersons(InputStream inStream) throws Throwable{
    		ArrayList<Person> persons = null;
    		Person person = null;
    		XmlPullParser parser = Xml.newPullParser();
    		parser.setInput(inStream, "UTF-8");
    		int eventType = parser.getEventType();//产生第一个事件
    		while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束解析事件
    			switch (eventType) {
    			case XmlPullParser.START_DOCUMENT://开始解析事件
    				persons = new ArrayList<Person>();
    				break;
    	
    			case XmlPullParser.START_TAG://开始元素
    				String name = parser.getName();//获取解析器当前指向的元素的名称
    				if("person".equals(name)){
    					person = new Person();
    					person.setId(new Integer(parser.getAttributeValue(0)));
    				}
    				if(person!=null){
    					if("name".equals(name)){
    						person.setName(parser.nextText());//获取解析器当前指向元素的下一个文本节点的值
    					}
    					if("age".equals(name)){
    						person.setAge(new Short(parser.nextText()));
    					}
    				}
    				break;
    			case XmlPullParser.END_TAG://结束元素
    				if("person".equals(parser.getName())){
    					persons.add(person);
    					person = null;
    				}
    				break;
    			}
    			eventType = parser.next();
    		}
    		return persons;
    	}
    }
    
    
    
    
     

       从内存占用率和执行效率方面考虑,应该尽量优先考虑sax和pull方式进行xml文件的解析。

     

          

  • 相关阅读:
    Linux平台不同解压缩命令的使用方法
    poj 1274 The Perfact Stall
    Experience Design for Sexable Forum
    JavaScript中的Array对象方法调用
    iOS9适配小结
    [Servlet&amp;JSP] HttpSession会话管理
    Android中的跨进程通信方法实例及特点分析(一):AIDL Service
    OpenCV——PS滤镜算法之Spherize 球面化(凸出效果)
    《Effective Modern C++》翻译--条款4:了解怎样查看推导出的类型
    Android开发系列之ListView
  • 原文地址:https://www.cnblogs.com/dream550/p/4157419.html
Copyright © 2011-2022 走看看