- 浏览: 78490 次
- 性别:
- 来自: 北京
文章分类
最新评论
需要JDom.jar
package test; import java.io.FileInputStream; import java.io.InputStream; import java.lang.reflect.Method; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; public class XmlUtil { private static final String PREFIX_SET = "set"; private static final String TYPE = "type"; private static final String PATTERN = "pattern"; private static final String NAME = "name"; private static final String CLASS = "class"; private static final String DATE = "Date"; private static final String LIST = "List"; private static final String ENTITY = "entity"; public List<Object> parse(String filename) throws Exception { SAXBuilder builder = new SAXBuilder(); InputStream in = null; try { in = new FileInputStream(filename); Document document = builder.build(in); Element root = document.getRootElement(); return convertToEntity(root, null); } finally { if (in != null) { in.close(); } } } private Object getDateValue(String type, String valueText, String pattern) { return new Date(); } private Object convertTypeValue(String type, String valueText) throws InstantiationException, IllegalAccessException, ClassNotFoundException { if ("java.lang.String".equals(type)) { return valueText; } if ("byte".equals(type) || "java.lang.Byte".equals(type)) { return Byte.valueOf(valueText); } if ("char".equals(type) || "java.lang.Character".equals(type)) { return Character.valueOf(valueText.charAt(0)); } if ("int".equals(type) || "java.lang.Integer".equals(type)) { return Integer.valueOf(valueText); } if ("long".equals(type) || "java.lang.Long".equals(type)) { return Long.valueOf(valueText); } if ("float".equals(type) || "java.lang.Float".equals(type)) { return Float.valueOf(valueText); } if ("double".equals(type) || "java.lang.Double".equals(type)) { return Double.valueOf(valueText); } if ("java.math.BigDecimal".equals(type)) { return BigDecimal.valueOf(Double.valueOf(valueText)); } if ("boolean".equals(type) || "java.lang.Boolean".equals(type)) { return Boolean.valueOf(valueText); } return null; } private List<Object> convertToEntity(Element root, String clazz) throws Exception { List<Object> entities = new ArrayList<Object>(); String entityName = root.getAttributeValue(CLASS); if (clazz != null) { entityName = clazz; } List<Element> elements = root.getChildren(); if (clazz == null) { for (Element record : elements) { Object entity = Class.forName(entityName).newInstance(); Method[] methods = Class.forName(entityName).getDeclaredMethods(); for (Element property : record.getChildren()) { setProperty(entity, methods, property); } entities.add(entity); } } else { Object entity = Class.forName(entityName).newInstance(); Method[] methods = Class.forName(entityName).getDeclaredMethods(); for (Element property : elements) { setProperty(entity, methods, property); } entities.add(entity); } return entities; } private void setProperty(Object entity, Method[] methods, Element property) throws Exception { String name = property.getName(); String text = property.getTextTrim(); Object value = null; String fieldType = property.getAttributeValue(TYPE); if (DATE.equalsIgnoreCase(fieldType)) { String pattern = property.getAttributeValue(PATTERN); value = getDateValue(fieldType, text, pattern); setPropertyValue(entity, methods, name, value, false); } else if (ENTITY.equalsIgnoreCase(property.getName())) { name = property.getAttributeValue(NAME); if (!isEmpty(name)) { String clazzName = property.getAttributeValue(CLASS); value = convertToEntity(property, clazzName).get(0); } setPropertyValue(entity, methods, name, value, false); } else if (LIST.equalsIgnoreCase(property.getName())) { name = property.getAttributeValue(NAME); List<Object> list = new ArrayList<Object>(); for (Element item : property.getChildren()) { Object obj = convertToEntity(item, property.getAttributeValue(CLASS)).get(0); list.add(obj); } value = list; setPropertyValue(entity, methods, name, value, false); } else { setPropertyValue(entity, methods, name, text, true); } } private void setPropertyValue(Object entity, Method[] methods, String name, Object value, boolean isPrimate) throws Exception { for (Method method : methods) { String methodName = method.getName(); boolean isSetMethod = methodName.startsWith(PREFIX_SET) && methodName.equalsIgnoreCase(PREFIX_SET + name); if (isSetMethod) { if (isPrimate) { Class<?>[] types = method.getParameterTypes(); Object obj = convertTypeValue(types[0].getName(), value.toString()); method.invoke(entity, obj); } else { method.invoke(entity, value); } break; } } } private boolean isEmpty(String str) { if (str == null || str.equals("")) { return true; } else { return false; } } public static void main(String[] args) { String input = "C:/dev/demo.xml"; XmlUtil test = new XmlUtil(); List<Object> entities; try { entities = test.parse(input); System.out.println("Size: " + entities.size()); for (Object obj : entities) { System.out.println("name: " + ((Person) obj).getName()); System.out.println("book: " + ((Person) obj).getBook().getName()); } } catch (Exception e) { e.printStackTrace(); } } }
<?xml version="1.0" encoding="UTF-8"?> <entities class="test.Person"> <entity id="234"> <name>David</name> <age>12</age> <birthday type="Date" pattern="yyyyy-mm-dd">2011-08-10</birthday> <entity name="book" class="test.Book"> <name>Love 1+1</name> <author>Victor</author> </entity> <list name="books" class="test.Book"> <entity id="" > <name>simple love</name> <author>Steven</author> </entity> <entity id=""> <name>deep love</name> <author>David</author> </entity> </list> </entity> </entities>
发表评论
-
toString 方法
2014-11-06 14:28 323@Override public String to ... -
[转]Android开发者必须深入学习的10个应用开源项目
2010-10-15 15:33 633http://hailinhe1986-163-com.ite ... -
Android Intent的几种用法全面总结
2010-10-15 15:31 676http://vvsongsunny.iteye.com/bl ... -
Android读取txt的方法
2010-10-15 15:26 14671、放入到资源文件夹里面,也就是所创建android工程的re ... -
Android中Intent的用法总结
2010-10-14 22:35 0http://jobenc.iteye.com/blog/71 ... -
android
2010-10-14 14:48 0虽然Smack在PC上可以工作得很好,功能也很强大,但在OPh ... -
android
2010-10-08 11:09 0http://androidappdocs-staging.a ... -
mysql group_concat用法
2010-09-30 13:46 945http://blog.sina.com.cn/s/blog_ ... -
Httpclient 下载资源
2010-07-30 13:28 1160HttpClient 下载网络资源 所需commons-ht ... -
注意设置httpclient连接数
2010-06-29 00:15 3185http://blog.csdn.net/lovingprin ... -
Javascript 基本操作
2010-04-17 10:44 6821:Div的隐藏与显示 <script type=&q ... -
判断形如((()))的字符串格式是否正确
2010-04-13 19:35 703对于判断字符串格式的这一类问题,解决办法由很多,最先想到得方法 ... -
MyEclipse继承属性编辑器
2010-03-18 19:35 1302在MyEclipse下添加属性编辑器: 在Eclipse的He ... -
判断是否为素数
2010-03-14 09:07 1033判断一个数是否为素数,方法很简单,实现如下: /* ... -
Byte,Short,Integer以及Long对象在不同数值范围内的比较情况总结
2010-03-14 08:50 3660在Java语言中,整型对象在不同数值范围内的比较分两种情况: ...
相关推荐
java 反射demo
给同事写的反射机制的用法,非常简单易用,大家一看就懂。也便于初学者对反射机制的理解 资源免费提供大家下载,如有疑问,可以直接咨询我
java反射demo
基本的Java反射机制的用法和备注,易学易懂
Java动态代理和Java反射的Demo演示,通俗易懂。
java 反射 实现现实业务处理。。。。。。。。。。。。。。。。。。。。。。。。。。。
Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法
java reflect Method getDeclaredMethod invoke getConstructor
Java反射的小例子,如何使用Java提供的API使用反射技术,操作类、属性、方法等。
本人blog中介绍Java反射中的演示代码,欢迎大家下载交流。
自己写的一些关于java使用反射的一些例子,感觉里面应该写的挺全了。希望有助于大家的学习.
java反射机制demo,代码中使用反射机制实现四个类
代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。
实现MethodInterceptor简单的aop 分别用cglib和反射实现了一下
Java的反射的测试代码
学习反射机制时候,编写的Demo.代码写的有点乱,具体可以大家自己琢磨下,其中包括Excel的操作Jar包
在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...
反射项目,我沃尔上传demo反射,Java编程反射运用
一个例子8个demo让你了解Java反射机制