动态解析xml

为了方便使用,动态的解析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();// 返回List
		String 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;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值