/**
* 创建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. 【开源项目之路】jquery的build问题

    在刚开始clone了jquery到本地build的时候,就遇到了问题. “ENORESTARGET No tag found that was able to satisfy ...” 提示为bowe ...

  2. WS之cxf简单实现

    1.服务端实现: 1.1 定义接口,用@WebService修饰: /** @WebService 所修饰的接口,那么接口里面的方法全部都属于web的服务  */ @WebService public ...

  3. 桶排序-Node.js

    , , , , ]; var a = [], i; ; i < b.length; i++) { var num = b[i]; a[num] = a[num]||; a[num] ++; nu ...

  4. poj 1552 Doubles

    #include <stdio.h> #include <stdlib.h> ]; int cmp(const void *a, const void *b) { return ...

  5. [cocos2d-js]按钮整合成大图后打APK后不显示

    网页版本都能正常显示碎图和整合成大图的 手机版本不正常 var btnKick = cc.MenuItemImage.create( "#btn_kick.png", " ...

  6. jszs 快速排序

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 一个采用python获取股票数据的开源库,相当全,及一些量化投资策略库

    tushare: http://tushare.waditu.com/index.html 为什么是Python? 就跟javascript在web领域无可撼动的地位一样,Python也已经在金融量化 ...

  8. 2款好用的Web在线编辑器

    1.CKEditor FCKEditor 现在已经重新开发,并改名为 CKEditor. CKeditor是一个专门使用在网页上,开放源代码,高度可定制,跨平台的所见即所得文字编辑器,兼容于绝大部分的 ...

  9. E2202 Required package 'VclJPG' not found

    xe8 [dcc32 Fatal Error] RaizeComponentsVcl_Design.dpk(40): E2202 Required package 'VclJPG' not found ...

  10. CSRF的攻击与防御(转)

    add by zhj:CSRF之所有发生,是因为http请求中会自动带上cookies,我的解决办法是:前端不要将数据放在cookie中,而是放在其它本地存储 (HTML5中称之为Web Storag ...