dom4j生成、解析xml
/**
* 创建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的更多相关文章
- dom4j递归解析XML字符串所有子节点
/** * dom4j递归解析所有子节点 * * @param childElements * @param mapEle * @return */ public Map<String, Obj ...
- dom4j如何解析XML文件
最近在 一些对xml文件的操作,下面简单写一个dom4j解析xml文件并将其封装到一个javabean中的例子,只是具有针对性的,不是通用的,仅供参考哦~~ 首先说:dom4j是一个java的XML ...
- 【dom4j】解析xml为map
dom4j解析xml文件 <?xml version="1.0" encoding="utf-8"?> <workflows> < ...
- java生成解析xml的另外两种方法Xstream
Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...
- DOM4J方式解析XML文件
dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory dom4j是一个简单的开源库,用于处理XML. X ...
- dom4j: 生成的XML文件根节点 xmlns="" 的问题
使用dom4j写入XML文件时,写入完毕后发现root element中没有 xmlns,也即是没有命名空间. 正确的写法如下: Document document = DocumentHelper. ...
- 【Android】使用Pull生成/解析XML文件
一.生成XML文件,即是将对象集合转为XML文件存储. 对象集合 –> XML(序列化) Android中使用android.util.Xml类对其进行了描述,提供相应的API. 步骤大致如下: ...
- JDOM,dom4j方式解析XML
<?xml version="1.0" encoding="UTF-8"?> <dataSources> <!-- 定义MySQL ...
- dom4j如何解析xml
简单解析自己定义的xml文件,首先,给解析xml文件的类来个构造方法: public xmlData(File xmlFile) { file = xmlFile; try { saxReader = ...
- java生成解析xml的另外两种方法JAXB
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反 ...
随机推荐
- ArcGIS API Reference & Flex API samples学习进度备忘
书签:跳过:另外跳过的内容有待跟进 __________________学习资源: 1.http://help.arcgis.com/en/webapi/flex/apiref/index.html ...
- cdh5.4、cm5.4 安装详细步骤
安装准备: 1.centos6.5 64位 虚拟机,内存分配4G.硬盘位20G 2.cm5.4 cdh5.4 包 安装步骤 一.centos安装完后,进行系统配置 1.关闭防火墙 service ip ...
- 指向函数的指针数组(C++)
我们能够创建一个指向函数的指针数组.为了选择一个函数,只需要使用数组的下标,然后间接引用这个指针.这种方式支持表格式驱动码的概念:可以根据状态变量去选择被执行函数,而不用条件语句或case语句.这种设 ...
- Android4.4 耳机检测分析
在ALSA架构中,ASOC是由3个部分组成:Platform.CODEC & Machine.而耳机检测一般是在Machine driver里实现,当然也可以在CODEC driver里实现. ...
- 设置sudo权限
由于CentOS安装之后,普通用户无sudo权限,故应该设置sudo权限. 此处假设当前用户为“cloudgis”. 1. 设置sudo权限,则设置如下: $ su root 输入root 密码 $ ...
- Strider安装(Ubuntu)
安装: git clone https://github.com/Strider-CD/strider.git && cd strider nam install 然而还是出现一大波错 ...
- 深入.Net字符串类型
.Net的字符串其实还是有很多东西可以写的.但是最近在学习SQL Server,只好先做下最近学习到的一些巧用,妙用之类的东西. 巧用String.Join拼接字串数组,字符串集合为字符串.如果在之前 ...
- 第三百二十九天 how can I 坚持
今天莫名其妙的烦,,都是上午搞电脑搞的,好乱,心情很差,又感觉有那么多事. 希望周六不要加班啊.很烦,不想加班. 貌似事情也不是很多.但是为什么会感觉乱七八糟的呢,力不从心的感觉,是能力不行吗. 晚上 ...
- <转载>浅谈C/C++的浮点数在内存中的存储方式
C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...
- HDU 5858 Hard problem (数学推导)
Hard problem 题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5858 Description cjj is fun with ...