為了方便使用,動態解析xml,近日寫了動態解析XML的類,上代碼
/** * 動態解析XML * @param obj 解析header部分的bean * @param cla 解析message內容的bean類 * @param xmlString 傳過來的xml * @return */public static List TNTResolveXML(Object obj, Class cla, String xmlString) {List resultList = new ArrayList();// 返回ListString isGetMessage = null; // 標誌是否開始擷取內容try {Object clabean = cla.newInstance();XmlPullParser parser = Xml.newPullParser();parser.setInput(new StringReader(xmlString));int event = parser.getEventType();while (event != XmlPullParser.END_DOCUMENT) {switch (event) {case XmlPullParser.START_TAG:if (parser.getName().equals("obj")) {isGetMessage = "y";}// 首先解析頭部返回的CODE等資訊if (isGetMessage == null) {Field[] fields = obj.getClass().getDeclaredFields();// 根據Class對象擷取屬性Method[] methods = obj.getClass().getDeclaredMethods();// 根據Class對象擷取所有方法for (Field f : fields) {if (f.getName().equals(parser.getName())) {for (Method method : methods) {String meth = method.getName();// 匹配set方法if (meth != null&& "set".equals(meth.substring(0, 3))&& Modifier.isPublic(method.getModifiers())&& ("set"+ Character.toUpperCase(f.getName().charAt(0)) + f.getName().substring(1)).equals(meth)) {// 調用set方法並賦值method.invoke(obj, parser.nextText());}}}}}if (isGetMessage != null && isGetMessage.equals("y")) {Method methd = obj.getClass().getMethod("getCode");methd.invoke(obj);if (methd.invoke(obj) != null) {if (methd.invoke(obj).equals("100")) {Field[] cla_fields = clabean.getClass().getDeclaredFields();// 根據Class對象擷取屬性Method[] cla_methods = clabean.getClass().getDeclaredMethods();// 根據Class對象擷取所有方法for (Field cla_f : cla_fields) {if (cla_f.getName().equals(parser.getName())) {for (Method cla_method : cla_methods) {String meth = cla_method.getName();// 匹配set方法if (meth != null&& "set".equals(meth.substring(0, 3))&& Modifier.isPublic(cla_method.getModifiers())&& ("set"+ Character.toUpperCase(cla_f.getName().charAt(0)) + cla_f.getName().substring(1)).equals(meth)) {// 調用set方法並賦值cla_method.invoke(clabean,parser.nextText());}}}}}}}break;case XmlPullParser.END_TAG:if (parser.getName().equals("obj")&& parser.getName() != null) {resultList.add(clabean);clabean = cla.newInstance();}default:break;}event = parser.next();}} catch (Exception e) {e.printStackTrace();}return resultList;}