/**
* 创建xml
* @param obj 泛型对象
* @param entityPropertys 泛型对象的List集合
* @param Encode XML自定义编码类型
* @param XMLPath XML文件的路径及文件名
* @date 2011-5-8
* @author lujan
*/
public void createXmlDocument(T obj, List<T> entityPropertys, String Encode,
String XMLPath) {
try {
XMLWriter writer = null;// 声明写XML的对象
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(Encode); // 设置XML文件的编码格式 UTF-8

File file = new File(XMLPath);//获得文件

if (file.exists()) {
file.delete();
}
// 创建xml文件
Document document = DocumentHelper.createDocument();
String rootname = obj.getClass().getSimpleName(); //获得简单类名
Element root = document.addElement(rootname + "s");//添加根节点
Field[] properties = obj.getClass().getDeclaredFields();//获得实体类的所有属性
//赋值
for (T t : entityPropertys) { //递归实体
Element element = root.addElement(rootname); //二级节点
for (int i = 0; i < properties.length; i++) {
//反射get方法
Method meth = t.getClass().getMethod("get"+ properties[i].getName().substring(0, 1).toUpperCase() + properties[i].getName().substring(1));
//为二级节点添加属性,属性值为对应属性的值
element.addElement(properties[i].getName()).setText(meth.invoke(t).toString());
}
}
writer = new XMLWriter(new FileOutputStream(file), format);
writer.write(document);
writer.close();
} catch (Exception e) {
System.out.println("XML文件写入失败");
e.printStackTrace();
}
}

/**
* 解析
* @param XMLPath XML文件的路径(含名字)
* @param t 泛型对象
* @return List<T>
* @date 2011-5-8
* @author lujn
*/
public List<T> parserXml(String XMLPath, T t) {
List<T> list = new ArrayList<T>(); //创建list集合
try {
File f = new File(XMLPath); //读取文件
SAXReader reader = new SAXReader();
Document doc = reader.read(f); //dom4j读取
Element root = doc.getRootElement();//获得根节点
Element secondElement; //二级节点
Field[] properties = t.getClass().getDeclaredFields();//获得实例的属性

Method setMethod = null;
for (Iterator i = root.elementIterator(t.getClass().getSimpleName()); i.hasNext();) {
//遍历t.getClass().getSimpleName()节点
secondElement = (Element) i.next(); //下一个二级节点
t = (T)t.getClass().newInstance(); //获得对象的新的实例
Object[] args = new Object[properties.length];
for (int j = 0; j < properties.length; j++) {
//遍历所有孙子节点
//实例的set方法
setMethod = t.getClass().getMethod("set"+ properties[j].getName().substring(0, 1).toUpperCase()+ properties[j].getName().substring(1),properties[j].getType());
setMethod.invoke(t,secondElement.elementText(properties[j].getName())) ;
}
list.add(t);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}

dom4j生成、解析xml的更多相关文章

  1. dom4j递归解析XML字符串所有子节点

    /** * dom4j递归解析所有子节点 * * @param childElements * @param mapEle * @return */ public Map<String, Obj ...

  2. dom4j如何解析XML文件

    最近在 一些对xml文件的操作,下面简单写一个dom4j解析xml文件并将其封装到一个javabean中的例子,只是具有针对性的,不是通用的,仅供参考哦~~ 首先说:dom4j是一个java的XML ...

  3. 【dom4j】解析xml为map

    dom4j解析xml文件 <?xml version="1.0" encoding="utf-8"?> <workflows> < ...

  4. java生成解析xml的另外两种方法Xstream

    Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...

  5. DOM4J方式解析XML文件

    dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory dom4j是一个简单的开源库,用于处理XML. X ...

  6. dom4j: 生成的XML文件根节点 xmlns="" 的问题

    使用dom4j写入XML文件时,写入完毕后发现root element中没有 xmlns,也即是没有命名空间. 正确的写法如下: Document document = DocumentHelper. ...

  7. 【Android】使用Pull生成/解析XML文件

    一.生成XML文件,即是将对象集合转为XML文件存储. 对象集合 –> XML(序列化) Android中使用android.util.Xml类对其进行了描述,提供相应的API. 步骤大致如下: ...

  8. JDOM,dom4j方式解析XML

    <?xml version="1.0" encoding="UTF-8"?> <dataSources> <!-- 定义MySQL ...

  9. dom4j如何解析xml

    简单解析自己定义的xml文件,首先,给解析xml文件的类来个构造方法: public xmlData(File xmlFile) { file = xmlFile; try { saxReader = ...

  10. java生成解析xml的另外两种方法JAXB

     JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反 ...

随机推荐

  1. 九度 Online Judge 之《剑指 Offer》一书相关题目解答

    前段时间准备华为机试,正好之前看了一遍<剑指 Offer>,就在九度 Online Judge 上刷了书中的题目,使用的语言为 C++:只有3题没做,其他的都做了. 正如 Linus To ...

  2. 14个最受欢迎的Python开源框架

    本文从GitHub中整理出的14个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Dja ...

  3. SparkR grammer

    They are different between local R and sparkR: sparkR 跑通的函数: http://blog.csdn.net/wa2003/article/det ...

  4. js中location.search、split()HTML5中localStorage

    1. location.search在客户端获取Url参数的方法 location.search是从当前URL的?号开始的字符串 如:http://www.baidu.com/s?wd=baidu&a ...

  5. PHP强大的内置filter (一)

    <?php #PHP内置的validate filter $input_data = True; $result = filter_var($input_data,FILTER_VALIDATE ...

  6. Flex之自定义事件

    1.通过dispatchEvent委托事件模式完成自定义事件: <?xml version="1.0" encoding="utf-8"?> < ...

  7. 基于mapreduce的大规模连通图寻找算法

    基于mapreduce的大规模连通图寻找算法 当我们想要知道哪些账号是一个人的时候往往可以通过业务得到两个账号之间有联系,但是这种联系如何传播呢? 问题 已知每个账号之间的联系 如: A B B C ...

  8. NServiceBus-日志

    默认的日志 NServiceBus一些有限,固执己见,内置的日志记录. 默认的日��行为如下: 控制台 所有 Info(及以上)消息将被输送到当前的控制台. 错误将会写 ConsoleColor.Re ...

  9. APIO2014 爆零总结

    真心爆零 不要不服 这次apio给了一种新的赛制 看上去很好? 所有人都可以在线提交 并且实时知道自己的分数 它对每个题目分成若干分数段 每个分数段有若干数据 要获得这个分数段的分数需要通过这个分数段 ...

  10. HDU-2888 Check Corners 二维RMQ

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2888 模板题.解题思路如下(转载别人写的): dp[row][col][i][j] 表示[row,ro ...