- 浏览: 81042 次
- 性别:
- 来自: 北京
文章分类
最新评论
需要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 359@Override public String to ... -
[转]Android开发者必须深入学习的10个应用开源项目
2010-10-15 15:33 680http://hailinhe1986-163-com.ite ... -
Android Intent的几种用法全面总结
2010-10-15 15:31 708http://vvsongsunny.iteye.com/bl ... -
Android读取txt的方法
2010-10-15 15:26 15001、放入到资源文件夹里面,也就是所创建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 986http://blog.sina.com.cn/s/blog_ ... -
Httpclient 下载资源
2010-07-30 13:28 1195HttpClient 下载网络资源 所需commons-ht ... -
注意设置httpclient连接数
2010-06-29 00:15 3227http://blog.csdn.net/lovingprin ... -
Javascript 基本操作
2010-04-17 10:44 7061:Div的隐藏与显示 <script type=&q ... -
判断形如((()))的字符串格式是否正确
2010-04-13 19:35 736对于判断字符串格式的这一类问题,解决办法由很多,最先想到得方法 ... -
MyEclipse继承属性编辑器
2010-03-18 19:35 1336在MyEclipse下添加属性编辑器: 在Eclipse的He ... -
判断是否为素数
2010-03-14 09:07 1066判断一个数是否为素数,方法很简单,实现如下: /* ... -
Byte,Short,Integer以及Long对象在不同数值范围内的比较情况总结
2010-03-14 08:50 3686在Java语言中,整型对象在不同数值范围内的比较分两种情况: ...
相关推荐
Java反射是Java编程语言中的一个强大特性,它允许我们在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性在处理不确定类型、插件系统、序列化、元数据处理以及许多其他...
给同事写的反射机制的用法,非常简单易用,大家一看就懂。也便于初学者对反射机制的理解 资源免费提供大家下载,如有疑问,可以直接咨询我
这个“Java反射演示Demo”是一个实例,展示了如何利用Java反射API进行各种操作。下面我们将深入探讨Java反射的核心概念及其在实际开发中的应用。 首先,我们需要了解什么是Java反射。在Java中,当我们编译一个程序...
### Java反射机制详解 #### 一、什么是Java反射机制? Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的...
Java反射是Java编程语言中的一个强大特性,它允许运行时检查类、接口、字段和方法的信息,甚至可以动态地创建对象并调用其方法。在Java中,`java.lang.reflect`包提供了对反射的支持,包括`Class`、`Constructor`、`...
这个“Java反射demo”很可能是包含了一些示例代码,用于演示如何在实际开发中应用反射技术。以下是关于Java反射的详细知识点: 1. **什么是反射**: Java反射机制是在运行状态中,对于任意一个类,都能够知道这个...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性在处理现实业务问题时尤其有用,例如实现插件化、元编程、动态代理等...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...
在“java反射demo”中,我们将深入探讨这个主题。 1. **类加载**:Java反射的起点通常是通过`Class`类的`forName()`方法加载指定类。例如,`Class<?> clazz = Class.forName("com.example.MyClass");`这行代码会...
Java反射技术是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至能够动态调用方法和创建对象。这个技术的核心在于`java.lang.reflect`包中的类,如`Class`、`...
接下来,我们讨论Java反射。反射是Java的一项强大的功能,它允许我们在运行时检查类、接口、字段和方法的信息,甚至可以在运行时创建和操作类的对象。`java.lang.Class`类是反射的核心,我们可以使用`Class.forName...
Java中的CGLib与反射是两种常用的动态代理技术,它们在实现面向切面编程(AOP)时发挥着重要作用。本文将深入探讨这两种技术,并通过一个简单的AOP demo来阐述它们的使用方法。 首先,让我们了解什么是CGLib。CGLib...
这个"Java的反射demo示例"很可能是包含了一些关于如何使用反射进行编程的代码实例。 反射的核心功能包括以下几点: 1. **获取类信息**:通过Class对象,我们可以获取到类的完整名称、类的属性、方法和构造器等信息...
Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类包括`Class`、`Field`、`Method`和`Constructor`等,它们分别代表...
通过这个Demo,你可以了解到Java反射的基本用法,并能够将这些知识应用到实际项目中去。反射虽然强大,但需要注意其性能开销和安全风险,因此在使用时需谨慎。在设计程序时,除非必要,否则应尽量避免过度依赖反射。
Java动态代理基于Java反射机制,可以在运行时动态地创建代理类和代理对象。与静态代理(即手动编写代理类)相比,动态代理无需预先为每个接口编写单独的代理类,使得代码更加灵活且易于维护。 2. **代理接口** 在...
Java反射是Java语言提供的一种强大的机制,它允许我们在运行时检查和操作类、接口、字段和方法等。本文将深入剖析Java反射的概念及其在实际开发中的应用。 首先,我们需要了解,反射的核心在于`java.lang.Class`类...
Java反射是Java编程语言的一个重要特性,它允许在运行时检查和操作类、接口、字段和方法等对象。反射提供了一种动态访问和修改程序的能力,使得代码可以在不知道具体类的情况下,对对象进行操作。 1. **Class类的...
Java的反射机制是Java语言的一项强大特性,它允许我们在运行时检查类、接口、字段和方法的信息,甚至能够在不知道对象具体类型的...通过运行和分析这个示例,我们可以更深入地理解Java反射机制的实际应用和工作原理。