• Android XML解析之Pull


    转自:http://telecom.chinaitlab.com/ydkf/872500.html

    Pull解析XML文档;

    首先建一个android项目,在cn.class3g.service里建一个名为person_list,xml:

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <persons>  
    3.     <person id="111">  
    4.         <name>Tom</name>  
    5.         <age>20</age>  
    6.     </person>  
    7.     <person id="222">  
    8.         <name>Mary</name>  
    9.         <age>17</age>  
    10.     </person>  
    11. </persons>  

    在cn.class3g.domain包下封装javabean,person:

     

     

    1. package cn.class3g.domain;  
    2.   
    3. public class Person {  
    4.     private int id;  
    5.     private String name;  
    6.     private int age;  
    7.   
    8.     public Person() {  
    9.     }  
    10.   
    11.     public Person(int id, String name, int age) {  
    12.         super();  
    13.         this.id = id;  
    14.         this.name = name;  
    15.         this.age = age;  
    16.     }  
    17.   
    18.     public int getId() {  
    19.         return id;  
    20.     }  
    21.   
    22.     public void setId(int id) {  
    23.         this.id = id;  
    24.     }  
    25.   
    26.     public String getName() {  
    27.         return name;  
    28.     }  
    29.   
    30.     public void setName(String name) {  
    31.         this.name = name;  
    32.     }  
    33.   
    34.     public int getAge() {  
    35.         return age;  
    36.     }  
    37.   
    38.     public void setAge(int age) {  
    39.         this.age = age;  
    40.     }  
    41.   
    42.     public String toString() {  
    43.         return "Person [id=" + id + "name=" + name + "age=" + age + "]";  
    44.     }  
    45.   
    46. }  

    在service包下创建PersonHandler类:

     

    1. <pre name="code" class="html">package cn.class3g.service;  
    2.   
    3. import java.io.InputStream;  
    4. import java.io.Writer;  
    5. import java.util.ArrayList;  
    6. import java.util.List;  
    7.   
    8. import org.xmlpull.v1.XmlPullParser;  
    9. import org.xmlpull.v1.XmlSerializer;  
    10.   
    11. import android.util.Xml;  
    12.   
    13. import cn.class3g.domain.Person;  
    14.   
    15. public class PullPersonService {  
    16.   
    17.     public static List<Person> getPersonList(InputStream inStream)  
    18.             throws Exception {  
    19.         List<Person> personList = null;  
    20.         //拿到XmlPullParser解析器  
    21.         XmlPullParser parser = Xml.newPullParser();  
    22.         //统一编码  
    23.         parser.setInput(inStream, "utf-8");  
    24.           
    25.         int eventType = parser.getEventType();  
    26.         //创建一个person对象  
    27.         Person person = null;  
    28.         //开始解析  
    29.         while (eventType != XmlPullParser.END_DOCUMENT) {  
    30.             switch (eventType) {  
    31.             case XmlPullParser.START_DOCUMENT:  
    32.                 personList = new ArrayList<Person>();  
    33.                 break;  
    34.             case XmlPullParser.START_TAG:  
    35.                 // 判断当前元素名是否为person  
    36.                 if ("person".equals(parser.getName())) {  
    37.                     person = new Person();  
    38.                     person.setId(Integer.valueOf(parser.getAttributeValue(0)));  
    39.                 } else if ("name".equals(parser.getName())) {  
    40.                     person.setName(parser.nextText());  
    41.                 } else if ("age".equals(parser.getName())) {  
    42.                     person.setAge(Integer.valueOf(parser.nextText()));  
    43.                 }  
    44.                 break;  
    45.             case XmlPullParser.END_TAG:  
    46.                 if ("person".equals(parser.getName()) && person != null) {  
    47.                     personList.add(person);  
    48.                     person = null;  
    49.                 }  
    50.                 break;  
    51.             }  
    52.   
    53.             // next方法的调用导致下一个节点的解析,同时返回下一个节点解析的事件类型代码  
    54.             eventType = parser.next();  
    55.         }  
    56.         return personList;  
    57.     }  
    58. }  


     

     

    接下来测试,在activity包下创建Test测试类:

     

    1. package cn.class3g.activity;  
    2.   
    3. import java.io.InputStream;  
    4. import java.util.ArrayList;  
    5. import java.util.List;  
    6.   
    7. import cn.class3g.domain.Person;  
    8. import cn.class3g.service.PullPersonService;  
    9.   
    10. import android.test.AndroidTestCase;  
    11. import android.util.Log;  
    12.   
    13. public class Test extends AndroidTestCase {  
    14.   
    15.     public void testPull() throws Throwable {  
    16.         InputStream inStream = this.getClass().getClassLoader()  
    17.                 .getResourceAsStream("person_list.xml");  
    18.         List<Person> personList = PullPersonService.getPersonList(inStream);  
    19.         Log.i("TAG", personList.toString());          
    20.     }  
    21. }  

    在测试前在清单中添加测试权限:

     

    1. <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="cn.class3g.activity"></instrumentation>  

    利用Android JUnit Test测试:

     

    控制台输出:


    另外两篇http://blog.csdn.net/qeqeqe236/article/details/6990245

    http://yangguangfu.iteye.com/blog/832277

    测试成功

  • 相关阅读:
    9.经典进程同步问题
    8.信号量
    7.进程同步之临界区问题
    6.CPU调度
    AIX 10G HA RAC卸载
    HP11.31安装11.2.0.3实施手册
    AIX上安装oracle10g
    习水医院12C RAC 数据库安装文档
    linux 11201(11203) ASM RAC 安装
    如果一个节点重新安装了,处理办法
  • 原文地址:https://www.cnblogs.com/qingblog/p/2672143.html
Copyright © 2020-2023  润新知