XML处理数据
来源:互联网 发布:js利用gettime() 月 编辑:程序博客网 时间:2024/06/01 08:54
将request里面的数据转到一个formbean里
final RoamOpenAF af = (RoamOpenAF) XmlUtil.xml2Form(request,
RoamOpenAF.class);
public class RoamOpenAF extends BaseAF
public class BaseAF extends ValidatorForm
package com.maywide.oss.commons.utils;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
/**
* 包含对xml格式数据进行转换的方法
* @author user
*
*/
public class XmlUtil {
private static Log log = LogFactory.getLog(XmlUtil.class);
/**
* 将request里包含的xml格式的数据部分转到一个list里面
*
* @param request
* @param clazz
* @return
* @throws Exception
*/
public static List xml2List(HttpServletRequest request, Class clazz)
throws Exception {
List<Object> list = new ArrayList<Object>();
try {
SAXBuilder sb = new SAXBuilder();
Document reqdoc = sb.build(request.getInputStream());
Element rootElement = reqdoc.getRootElement(); // 得到根元素
Object object = null;
List dataList = rootElement.getChildren("data");
if (dataList == null || dataList.isEmpty())
return list;
Element example = (Element) dataList.get(0);
List childExampleList = example.getChildren();
if (childExampleList == null || childExampleList.isEmpty())
return list;
String[] names = new String[childExampleList.size()];
for (int i = 0; i < childExampleList.size(); i++) {
Element element = (Element) childExampleList.get(i);
if (element.getName() == null
|| element.getName().trim().equals(""))
continue;
names[i] = element.getName();
}
for (Iterator it = dataList.iterator(); it.hasNext();) {
Element childElement = (Element) it.next();
object = clazz.newInstance();
for (int i = 0; i < names.length; i++) {
Element e = childElement.getChild(names[i]);
XmlUtil.setValue(names[i], e.getText(), object);
}
list.add(object);
}
} catch (Exception e) {
throw e;
}
return list;
}
/**
* 将request里面的数据转到一个formbean里
* @param request
* @param clazz
* @return
* @throws Exception
*/
public static Object xml2Form(HttpServletRequest request, Class clazz)
throws Exception {
Object object = null;
try {
SAXBuilder sb = new SAXBuilder();
Document reqdoc = sb.build(request.getInputStream());
Element root = reqdoc.getRootElement();
List list = root.getChildren();
object = clazz.newInstance();
for (int i = 0; i < list.size(); i++) {
Element e = (Element) list.get(i);
String name = e.getName();
String value = e.getText();
if (name == null || name.trim().equals(""))
continue;
if (name.indexOf(".") >= 0) {
String[] subNames = PubUtil.split(name, ".");
if (subNames == null)
continue;
Object subObject = object;
for (int j = 0; j < subNames.length; j++) {
if (subNames[j] == null
|| subNames[j].trim().equals(""))
continue;
try {
if (j < subNames.length - 1) {
String methodName = "get"
+ subNames[j].substring(0, 1)
.toUpperCase()
+ subNames[j].substring(1);
Method getMethod = subObject.getClass()
.getDeclaredMethod(methodName,
new Class[] {});
Object tmp = subObject;
subObject = getMethod.invoke(subObject,
new Object[] {});
Class type = getMethod.getReturnType();
if (subObject == null) {
subObject = type.newInstance();
String setMethodName = "set"
+ subNames[j].substring(0, 1)
.toUpperCase()
+ subNames[j].substring(1);
Method setMethod = tmp.getClass()
.getDeclaredMethod(
setMethodName,
new Class[] { type
.getClass() });
setMethod.invoke(tmp, subObject);
}
} else {
XmlUtil.setValue(subNames[j], value, subObject);
}
} catch (NoSuchMethodException nsme) {
continue;
}
}
} else {
XmlUtil.setValue(name, value, object);
}
}
} catch (Exception e) {
throw e;
}
return object;
}
/**
* 把object里名为field的属性的值设为value
* @param field
* 要设置的属性
* @param value
* 要设置的值
* @param object
* 被设置的对象
* @throws Exception
*/
public static void setValue(String field, String value, Object object)
throws Exception {
if (field == null || field.trim().equals(""))
return;
String methodName = "set" + field.substring(0, 1).toUpperCase()
+ field.substring(1);
Method[] methods = object.getClass().getMethods();
for (int i = 0; i < methods.length; i++) {
if (methodName.equals(methods[i].getName())) {
Class[] paramClass = methods[i].getParameterTypes();
if (paramClass == null || paramClass.length != 1)
continue;
if (paramClass[0].equals(String.class)) {
methods[i].invoke(object, new Object[] { value });
} else if (paramClass[0].equals(Long.class)) {
if (value == null || value.equals("")) {
Long tempLong = null;
methods[i].invoke(object, new Object[] { tempLong });
} else {
methods[i].invoke(object, Long.valueOf(value));
}
} else if (paramClass[0].equals(Double.class)) {
if (value == null || value.equals("")) {
Double tempDouble = null;
methods[i].invoke(object, new Object[] { tempDouble });
} else {
methods[i].invoke(object, Double.valueOf(value));
}
} else if (paramClass[0].equals(java.util.Date.class)) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.US);
Date date = null;
try {
if (!StringUtils.isEmpty(value)){
if (!value.contains(":")){
//因为formatter的格式为:yyyy-MM-dd HH:mm:ss,所以,value必须为包括"时分秒"。
//否则会出现unknown source,并throw parseException。
//此处,只做简单的判断
value = value + " 00:00:00";
}
date = formatter.parse(value);
}
}
catch(Exception ex) {
log.error("parse date exception, case: ",ex);
}
methods[i].invoke(object, new Object[] { date });
}
break;
}
}
}
}
- 处理XML数据
- ajax 处理 xml 数据
- python处理xml数据
- jquery处理xml数据
- XML处理数据
- XML数据的处理
- 使用Java处理XML数据
- 简单处理IP XML数据
- xml 二进制数据 传输处理
- 用Java 处理 XML 数据
- 用Java 处理 XML 数据
- 用Java处理XML数据
- Ajax处理XML数据演示
- 利用XML接口处理XML串数据
- Flex 处理数据 访问 XML 数据
- Flex3处理数据 访问 XML 数据1
- .NET Framework轻松处理XML数据(一)
- .NET Framework轻松处理XML数据(二)
- Struts Menu 祥解
- C#把mongodb导入sqlsever
- shell中的括号(小括号,大括号,中括号)
- ZOJ 3179 Calculate With Abacus(字符处理)
- listView 取消点击背景
- XML处理数据
- Mac OS下安装配置Git-TF连接TFS2012教程
- HashMap 和Hashtable 的区别
- ZOJ 1654 Place the Robots(二分图最大匹配)
- video4linux(v4l)使用摄像头的实例基础教程与体会
- 对java多态的理解
- 解决teechart单个Series时图例显示不正常办法
- 从数据库中取图片路径 实现jQuery 图片点击放大效果
- 获得 Struts2 checkboxList 标签 value值 --工作笔记