YLLEN

要去看埃菲尔铁塔的顶

欢迎关注本人微博:t.cn/RGSLVUk

自动解析xml[java]

来源: https://blog.csdn.net/wanggsx918/article/details/38403141


  1. /** 

  2.  * pull解析xml 

  3.  *  

  4.  * @param XML 

  5.  * @param elemt 

  6.  * @param clazz指定接收的model类名称 

  7.  * @param strs是Fileds字符串数据 

  8.  * @return 

  9.  */  

  10. public static List<Object> getParserFromXML(String XML, String elemt,  

  11.         String clazz) throws Exception {  

  12.     XmlPullParser parser = Xml.newPullParser();  

  13.     parser.setInput(convert_StringTOInputStream(XML), "GB2312");  

  14.     List<Object> list = new ArrayList<Object>();  

  15.     Object obj = null;  

  16.     Boolean isStarted = false;  

  17.     Field[] fields_CST = CST.class.getFields();  

  18.     int event = parser.getEventType();// 产生第一个事件  

  19.     while (event != XmlPullParser.END_DOCUMENT) {  

  20.         switch (event) {  

  21.         case XmlPullParser.START_DOCUMENT:// 判断当前事件是否是文档开始事件  

  22.             break;  

  23.         case XmlPullParser.START_TAG:// 判断当前事件是否是标签元素开始事件  

  24.             if (elemt.equals(parser.getName())) {  

  25.                 // 判断开始标签元素是否是所指定的element  

  26.                 if (clazz != null && clazz != "") {  

  27.                     obj = Class.forName(clazz).newInstance();  

  28.                     isStarted = true;  

  29.                 } else {  

  30.                     obj = parser.nextText();  

  31.                     list.add(obj);  

  32.                     return list;  

  33.                 }  

  34.             } else if (isStarted) {  

  35.                 // 开始填数据至obj  

  36.                 for (int i = 0; i < fields_CST.length - 1; i++) {  

  37.                     if (parser.getName().equals(fields_CST[i].get(null))) {  

  38.                         String fname = fields_CST[i].getName();  

  39.                         fname=fname.substring(0,fname.indexOf("_"));  

  40.                       fname =Character.toUpperCase(fname.charAt(0))+fname.substring(1);  

  41.                         Class.forName(clazz)  

  42.                                 .getMethod("set" + fname, String.class)  

  43.                                 .invoke(obj, parser.nextText());  

  44.                         break;  

  45.                     }  

  46.                 }  

  47.             }  

  48.             break;  

  49.         case XmlPullParser.END_TAG:// 判断当前事件是否是标签元素结束事件  

  50.             if (elemt.equals(parser.getName())) {// 判断结束标签元素是否是book  

  51.                 list.add(obj);// 将book添加到books集合  

  52.                 obj = null;  

  53.                 isStarted = false;  

  54.             }  

  55.             break;  

  56.         }  

  57.         event = parser.next();// 进入下一个元素并触发相应事件  

  58.     }  

  59.     return list;  

  60. }  


评论
热度 ( 1 )

© YLLEN | Powered by LOFTER