关闭

Android解析XML到对象工具类

标签: androidxmlxml解析
736人阅读 评论(0) 收藏 举报
分类:
Java代码  
  1. /** 
  2.  * 解析XML工具类 
  3.  */  
  4. public class XmlUtils {  
  5.   
  6.     /** 
  7.      * 解析XML转换成对象 
  8.      *  
  9.      * @param is 
  10.      *            输入流 
  11.      * @param clazz 
  12.      *            对象Class 
  13.      * @param fields 
  14.      *            字段集合一一对应节点集合 
  15.      * @param elements 
  16.      *            节点集合一一对应字段集合 
  17.      * @param itemElement 
  18.      *            每一项的节点标签 
  19.      * @return 
  20.      */  
  21.     public static List<Object> parse(InputStream is, Class<?> clazz,  
  22.             List<String> fields, List<String> elements, String itemElement) {  
  23.         Log.v("rss""开始解析XML.");  
  24.         List<Object> list = new ArrayList<Object>();  
  25.         try {  
  26.             XmlPullParser xmlPullParser = Xml.newPullParser();  
  27.             xmlPullParser.setInput(is, "UTF-8");  
  28.             int event = xmlPullParser.getEventType();  
  29.   
  30.             Object obj = null;  
  31.   
  32.             while (event != XmlPullParser.END_DOCUMENT) {  
  33.                 switch (event) {  
  34.                 case XmlPullParser.START_TAG:  
  35.                     if (itemElement.equals(xmlPullParser.getName())) {  
  36.                         obj = clazz.newInstance();  
  37.                     }  
  38.                     if (obj != null  
  39.                             && elements.contains(xmlPullParser.getName())) {  
  40.                         setFieldValue(obj, fields.get(elements  
  41.                                 .indexOf(xmlPullParser.getName())),  
  42.                                 xmlPullParser.nextText());  
  43.                     }  
  44.                     break;  
  45.                 case XmlPullParser.END_TAG:  
  46.                     if (itemElement.equals(xmlPullParser.getName())) {  
  47.                         list.add(obj);  
  48.                         obj = null;  
  49.                     }  
  50.                     break;  
  51.                 }  
  52.                 event = xmlPullParser.next();  
  53.             }  
  54.         } catch (Exception e) {  
  55.             Log.e("rss""解析XML异常:" + e.getMessage());  
  56.             throw new RuntimeException("解析XML异常:" + e.getMessage());  
  57.         }  
  58.         return list;  
  59.     }  
  60.       
  61.     /** 
  62.      * 设置字段值 
  63.      *  
  64.      * @param propertyName 
  65.      *            字段名 
  66.      * @param obj 
  67.      *            实例对象 
  68.      * @param value 
  69.      *            新的字段值 
  70.      * @return 
  71.      */  
  72.     public static void setFieldValue(Object obj, String propertyName,  
  73.             Object value) {  
  74.         try {  
  75.             Field field = obj.getClass().getDeclaredField(propertyName);  
  76.             field.setAccessible(true);  
  77.             field.set(obj, value);  
  78.         } catch (Exception ex) {  
  79.             throw new RuntimeException();  
  80.         }  
  81.     }  
  82.       
  83. }  

实体:
Java代码  收藏代码
  1. public class User{  
  2.   private String name;  
  3.   private String age;  
  4.   
  5.   get...set...  
  6. }  


XML:
Java代码  收藏代码
  1. <Users>  
  2.   <User>  
  3.     <name>张三</name>  
  4.     <age>20</age>  
  5.   </User>  
  6.   <User>  
  7.     <name>李四</name>  
  8.     <age>21</age>  
  9.   </User>  
  10.   <User>  
  11.     <name>王五</name>  
  12.     <age>22</age>  
  13.   </User>  
  14. </Users>  


对应的参数:
Java代码  收藏代码
  1.     /**  
  2.      * 解析XML转换成对象  
  3.      *   
  4.      * @param is  
  5.      *            输入流,这个就是XML文件的流 
  6.      * @param clazz  
  7.      *            对象Class,User类的class 
  8.      * @param fields  
  9.      *            字段集合一一对应节点集合,例如这个类就有两个字段,name和age,放入         List中,放入的位置要和下面的XML节点的位置一一对应, 
  10. List<String> fields = new ArrayList<String>(); 
  11. fields.add("name"); 
  12. fields.add("age"); 
  13.      * @param elements  
  14.      *            节点集合一一对应字段集合,例如这个XML有两个属性,name和age,放入List中,放入的位置要和上面的实体属性的位置一一对应, 
  15. List<String> elements = new ArrayList<String>(); 
  16. fields.add("name"); 
  17. fields.add("age"); 
  18.      * @param itemElement  
  19.      *            每一项的节点标签,在XML中按哪个节点当成一组,这里是User 
  20.      * @return  
  21.      */    
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:190895次
    • 积分:2600
    • 等级:
    • 排名:第14700名
    • 原创:34篇
    • 转载:237篇
    • 译文:1篇
    • 评论:8条
    最新评论