zoukankan      html  css  js  c++  java
  • android pull解析相关理解

    Pull解析XML 
    XmlPullParser解析器的运行方式与SAX解析器相似.它提供了类似的事件(开始元素和结束元素),但需要使用parser.next()方法来提取它们.事件将作为数值代码被发送,因此可以根据不同的事件代码值来进行不同的处理.通过parser.getEventType()方法来取得事件的代码值(如XmlPullParser.START_DOCUMENT、XmlPullParser.START_TAG、XmlPullParser.END_TAG). 
    当处于某个元素时可以调用XmlPullParser的getAttributte()方法来获取属性的值,也可调用它的nextText()获取本节点的值。 
    具体思路: 
    *构建PullXmlParser解析器 
    XmlPullParser parser = Xml.newPullParser(); 
    *将xml文档注册到解析器中 
    parser.setInput(); 
    *触发事件,获得事件类型码 
    int event = parser.getEventType(); 
    *针对事件进行具体分析 
    "name".equals(parser.getName());//判断开始标签元素是否是name 
    parser.getAttributeValue(0);//得到标签的属性值 
    parser.nextText();//获取下一个Text节点的值 
    *触发并进入下一个事件 
    event = parser.next(); 
    Pull解析和Sax解析不一样的地方有: 
    (1)pull读取xml文件后触发相应的事件调用方法返回的是数字 
    (2)pull可以在程序中控制想解析到哪里就可以停止解析。 
    优点:不是一次加载,中途可以停止 

    ***********pull解析的代码*************

     1 public class PullparserActivity extends Activity { 
     2 private TextView mtextview; 
     3 private ListView mlistview; 
     4 
     5 @Override 
     6 protected void onCreate(Bundle savedInstanceState) { 
     7 
     8 super.onCreate(savedInstanceState); 
     9 setContentView(R.layout.domparser); 
    10 mtextview = (TextView) findViewById(R.id.textView1); 
    11 mlistview = (ListView) findViewById(R.id.listView1); 
    12 mtextview.setText("pull解析xml"); 
    13 
    14 List<Student> list = parser(); 
    15 ArrayAdapter<Student> adapter = new ArrayAdapter<Student>(this, 
    16 android.R.layout.simple_list_item_1, list); 
    17 mlistview.setAdapter(adapter); 
    18 
    19 } 
    20 
    21 private List<Student> parser() { 
    22 List<Student> list = new ArrayList<Student>(); 
    23 // 获取pull解析器 
    24 XmlPullParser parser = Xml.newPullParser(); 
    25 try { 
    26 // 加载xml文档 
    27 parser.setInput(PullparserActivity.this.getClassLoader() 
    28 .getResourceAsStream("student.xml"), "utf-8"); 
    29 // c.触发事件,获得事件类型码 
    30 int event = parser.getEventType(); 
    31 Student student = null; 
    32 
    33 while (event != XmlPullParser.END_DOCUMENT) { 
    34 switch (event) { 
    35 case XmlPullParser.START_DOCUMENT:// 文档开始 
    36 break; 
    37 case XmlPullParser.START_TAG:// 开始标签 
    38 if ("student".equals(parser.getName())) { 
    39 student = new Student(); 
    40 student.setId(Integer.valueOf(parser 
    41 .getAttributeValue(0))); 
    42 
    43 } 
    44 Log.i("TAG", "infor"); 
    45 if (student != null) { 
    46 if ("name".equals(parser.getName())) { 
    47 student.setName(parser.nextText()); 
    48 } else if ("age".equals(parser.getName())) { 
    49 student.setAge(Integer.valueOf(parser 
    50 .getAttributeValue(0))); 
    51 } 
    52 } 
    53 break; 
    54 case XmlPullParser.END_TAG://結束标签 
    55 if ("student".equals(parser.getName())) { 
    56 list.add(student); 
    57 student = null; 
    58 } 
    59 Log.i("TAG", "infor"); 
    60 break; 
    61 case XmlPullParser.TEXT:// 文本解析 
    62 break; 
    63 } 
    64 event = parser.next(); 
    65 
    66 } 
    67 } catch (Exception e) { 
    68 e.printStackTrace(); 
    69 } 
    70 
    71 return list; 
    72 } 
    73 } 
  • 相关阅读:
    缓存之雪崩现象与穿透现象
    Linux下安装php的memcached扩展(memcache的客户端)
    Linux下编译、安装php
    Linux下编译、安装并启动apache
    Linux下编译、安装并启动memcached
    memcached内存分配机制
    Memcached的过期数据的过期机制及删除机制(LRU)
    linux下mysql的root密码忘记----解决方案
    Linux服务管理
    Python中import机制
  • 原文地址:https://www.cnblogs.com/xuanyuanzhuo-blog/p/3983463.html
Copyright © 2011-2022 走看看