Android解析XML到对象工具类

转载 2015年07月10日 09:31:11
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.      */    

Android中解析XML

XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解...
  • liuhe688
  • liuhe688
  • 2011年05月12日 19:32
  • 213128

Android代码小记之Xml解析工具类

import java.io.ByteArrayInputStream; import java.util.HashMap; import javax.xml.parsers.DocumentBu...

android中解析xml文件的工具类XmlUtils

----------------------------------------------------------------------------------------------------...

安卓快速解析xml工具类

xml工具类XmlHelper利用sax的DefaultHandler做快速的解析,并通过反射把解析结果储存在一个对象里或者一个储存该对象的list里。XmlHelper代码import java.i...

Android中使用Xml内置解析器pull来解析Xml原始资源

在Android中解析Xml资源文件很常见。Android为我们内置了一个叫做Pull的Xml资源解析器,它可以帮助我们轻松解析Xml资源文件,下面我就跟大家来分享下Pull解析器对Xml文件的解析步...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Android开发之XML文件的解析的三种方法

XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Android几种解析XML方式的比较

XML介绍:Extensible Markup Language,即可扩展标记语言 一、使用SAX解析XMLSAX(Simple API for XML) 使用流式处理的方式,它并不记录所读内容的相关...

重新装cocoapods遇到些许问题

sudo gem update --system 更新最新的ruby环境 gem source -l 查看当前的Ruby镜像 gem source --remove https://rubygem...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android解析XML到对象工具类
举报原因:
原因补充:

(最多只允许输入30个字)