- 浏览: 230586 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
lwb314:
你的这个是创建的临时的hive表,数据也是通过文件录入进去的, ...
Spark SQL操作Hive数据库 -
yixiaoqi2010:
你好 我的提交上去 总是报错,找不到hive表,可能是哪里 ...
Spark SQL操作Hive数据库 -
bo_hai:
target jvm版本也要选择正确。不能选择太高。2.10对 ...
eclipse开发spark程序配置本地运行
最近做流程项目用到了dom4j,于是就对dom4j进行了大概的学习。我做的流程项目是jbpm4的,实现的功能是将流程用到的表从mysql数据库中导出,通过dom4j解析成xml文件,导出到客户端,这是流程的导出;也可以将导出的流程xml文件导入到mysql数据库中。别的不多说,下面我通过一个例子总结我对dom4j的学习。
首先创建一个测试项目dom4jTest,在项目的src目录下面创建一个pojo:Person.java代码如下:
下面是Map和Pojo之间转换的通用方法:MapPojoUtils.java作为工具类
因为实际项目中直接用的是数据库,但是在这个例子中为了简单我不是用数据库了,而是创建一个类来模拟数据库:MyDataSource.java
以上准备是为最重要的部分dom4j的解析做准备,关键类在下面:Dom4jTest.java
运行pojo2Xml()方法,则在d盘中会创建一个person.xml文件,打开文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Person id="0">
<node id="0">
<id id="id">0</id>
<name name="name">张三0</name>
<sex sex="sex">女</sex>
<age age="age">1</age>
<address address="address">中国</address>
</node>
<node id="1">
<id id="id">1</id>
<name name="name">张三1</name>
<sex sex="sex">男</sex>
<age age="age">0</age>
<address address="address">中国</address>
</node>
<node id="2">
<id id="id">2</id>
<name name="name">张三2</name>
<sex sex="sex">女</sex>
<age age="age">66</age>
<address address="address">中国</address>
</node>
<node id="3">
<id id="id">3</id>
<name name="name">张三3</name>
<sex sex="sex">女</sex>
<age age="age">44</age>
<address address="address">中国</address>
</node>
<node id="4">
<id id="id">4</id>
<name name="name">张三4</name>
<sex sex="sex">男</sex>
<age age="age">50</age>
<address address="address">中国</address>
</node>
<node id="5">
<id id="id">5</id>
<name name="name">张三5</name>
<sex sex="sex">男</sex>
<age age="age">67</age>
<address address="address">中国</address>
</node>
<node id="6">
<id id="id">6</id>
<name name="name">张三6</name>
<sex sex="sex">女</sex>
<age age="age">25</age>
<address address="address">中国</address>
</node>
<node id="7">
<id id="id">7</id>
<name name="name">张三7</name>
<sex sex="sex">女</sex>
<age age="age">53</age>
<address address="address">中国</address>
</node>
<node id="8">
<id id="id">8</id>
<name name="name">张三8</name>
<sex sex="sex">男</sex>
<age age="age">84</age>
<address address="address">中国</address>
</node>
<node id="9">
<id id="id">9</id>
<name name="name">张三9</name>
<sex sex="sex">男</sex>
<age age="age">94</age>
<address address="address">中国</address>
</node>
<node id="10">
<id id="id">10</id>
<name name="name">张三10</name>
<sex sex="sex">女</sex>
<age age="age">48</age>
<address address="address">中国</address>
</node>
</Person>
</root>
运行xml2Sql()方法,则可以将d盘中创建的person.xml文件进行解析,并转成POJO,此时如果有数据库就可以将转成的POJO保存的数据库中了。
总结一下,该例子中用到的重要知识点:java的反射,dom4j解析。
还有一个比较实用的工具类Map和POJO之间的转化。
永久链接:http://kevin12.iteye.com/blog/1940281
首先创建一个测试项目dom4jTest,在项目的src目录下面创建一个pojo:Person.java代码如下:
package com.lujinyong.dom4j; /** * * @Description: person类用来测试java反射在dom4j中的使用 * @Author: lujinyong */ public class Person { private int id;// 用户id private String name;// 用户名称 private String sex;// 性别 private int age;// 年龄 private String address;// 住址 public Person(int id, String name, String sex, int age, String address) { this.id = id; this.name = name; this.sex = sex; this.age = age; this.address = address; } /**这里将setter和getter方法省略了*/ //重新toString()方法 @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + ", address=" + address + "]"; } }
下面是Map和Pojo之间转换的通用方法:MapPojoUtils.java作为工具类
package com.lujinyong.dom4j; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.apache.commons.beanutils.BeanUtils; /** * * @Description: map和pojo之间的转换 * @Author: lujinyong */ public class MapPojoUtils { /** * 将map转换成对应的Pojo 类 * @param 要转换成的对像 * @param map要转换的map * @return */ public static Object map2Pojo(Object o, Map map) { Set<Map.Entry<String, Object>> set = map.entrySet(); for (Map.Entry<String, Object> entry : set) { if (entry.getValue() instanceof java.util.Date) { Date d = (Date) entry.getValue(); map.put(entry.getKey(), MapPojoUtils.addDate(d, 0)); } } BeanUtils bu = new BeanUtils(); try { bu.populate(o, map); } catch (Exception e) { e.printStackTrace(); } return o; } /** * 将pojo 对像转换成map * @param obj * @return */ public static Map pojo2Map(Object obj) { Map hashMap = new HashMap(); Class c = obj.getClass(); Field f[] = c.getDeclaredFields(); Method method; String fieldName; for (Field field : f) { fieldName = field.getName(); try { method = c.getDeclaredMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1)); hashMap.put(fieldName, method.invoke(obj)); } catch (Throwable e) { System.err.println(e); } } return hashMap; } /** * 日期递增 * @param currentDate * @param addNum * @return */ public static Date addDate(Date currentDate,int addNum) { Calendar calender = Calendar.getInstance(); calender.setTime(currentDate); calender.add(Calendar.DATE, addNum); Date date = calender.getTime(); return date; } }
因为实际项目中直接用的是数据库,但是在这个例子中为了简单我不是用数据库了,而是创建一个类来模拟数据库:MyDataSource.java
package com.lujinyong.dom4j; import java.util.ArrayList; import java.util.List; /** * * @Description:数据源,用了模拟数据库 * @Author: lujinyong */ public class MyDataSource { /** * * @Description: 获取10个person信息 * @Auther: lujinyong */ public static List<Person> getPersonList() { List<Person> list = new ArrayList<Person>(); for (int i = 0; i < 10; i++) { Person p = new Person(); p.setId(i); p.setName("张三" + i); p.setSex(((int) (Math.random() * 100)) % 2 == 0 ? "女" : "男"); p.setAge(((int) (Math.random() * 100))); p.setAddress("中国"); list.add(p); } return list; } }
以上准备是为最重要的部分dom4j的解析做准备,关键类在下面:Dom4jTest.java
package com.lujinyong.dom4j; import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; /** * * @Description: 该类测试dom4j的基本使用 * @Author: lujinyong */ public class Dom4jTest { /** * * @Description:将对象转成xml文件 * @Auther: lujinyong */ @Test public void pojo2Xml(){ /**1.创建document*/ Document document = DocumentHelper.createDocument(); /**2.添加根元素*/ Element rootElement = document.addElement("root"); /**3.用反射将person写到xml中*/ List<Person> list = MyDataSource.getPersonList(); for(Person person:list){ rootElement = Dom4jTest.object2Element(rootElement, person, String.valueOf(person.getId())); } /**4.将document写到xml中并保存到服务器指定的目录中*/ FileOutputStream xmlOut; try { xmlOut = new FileOutputStream(new File("d:/person.xml")); XMLWriter xmlWriter = new XMLWriter(xmlOut,OutputFormat.createPrettyPrint()); xmlWriter.write(document); xmlWriter.close(); } catch (Exception e) { e.printStackTrace(); } } /** * * @Description:将对应的对象写到xml中 * @Auther: lujinyong */ public static Element object2Element(Element root,Object obj,String id){ try { //获取Document根元素 Class clazz = obj.getClass(); //获取对象名称 String str = clazz.getName(); String objName = str.substring(str.lastIndexOf(".")+1); //获取对象元素(以表名为标签的元素),不存在,则创建 Element tableElement = root.element(objName); if(tableElement == null){ tableElement = root.addElement(objName).addAttribute("id", id); } //创建一个节点元素 Element nodeElement = tableElement.addElement("node").addAttribute("id", id); Field[] fields = clazz.getDeclaredFields(); //遍历属性 for(Field field :fields){ /**拼接出属性对应的getter方法名*/ //获取对象属性 String fieldName = field.getName(); StringBuilder sb = new StringBuilder(); sb.append("get"); sb.append(fieldName.substring(0,1).toUpperCase()); if(fieldName.length()>1){ sb.append(fieldName.substring(1)); } String getMethodName = sb.toString(); //反射method对象 Method getMethod = obj.getClass().getMethod(getMethodName); //调用方法获取值 Object fieldValue = getMethod.invoke(obj); //添加节点子元素元素 Element fieldElement = nodeElement.addElement(fieldName).addAttribute(fieldName, fieldName); fieldElement.setText(fieldValue==null?"":fieldValue.toString()); } } catch (Exception e) { throw new RuntimeException(e); } return root; } /** * * @Description: 将xml中的数据转成Person对象 * @Auther: lujinyong */ @Test public void xml2Sql(){ String filePath = "d:/person.xml"; List<Person> list = new ArrayList<Person>(); SAXReader reader = new SAXReader(); try { /**1.读取xml文件,生成document*/ Document document = reader.read(new File(filePath)); /**2.将xml的流程节点信息保存到节点表中*/ List<Element> nodeList = document.getRootElement().element("Person").elements("node"); Map<String,Object> map = new HashMap<String, Object>(); for(Element e : nodeList){ List<Element> temp = e.elements(); for(Element t : temp){ map.put(t.getName(), t.getText()); } Person person = (Person) MapPojoUtils.map2Pojo(new Person(), map); list.add(person); } for(Person p : list){ System.out.println(p.toString()); } } catch (DocumentException e) { e.printStackTrace(); } } }
运行pojo2Xml()方法,则在d盘中会创建一个person.xml文件,打开文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Person id="0">
<node id="0">
<id id="id">0</id>
<name name="name">张三0</name>
<sex sex="sex">女</sex>
<age age="age">1</age>
<address address="address">中国</address>
</node>
<node id="1">
<id id="id">1</id>
<name name="name">张三1</name>
<sex sex="sex">男</sex>
<age age="age">0</age>
<address address="address">中国</address>
</node>
<node id="2">
<id id="id">2</id>
<name name="name">张三2</name>
<sex sex="sex">女</sex>
<age age="age">66</age>
<address address="address">中国</address>
</node>
<node id="3">
<id id="id">3</id>
<name name="name">张三3</name>
<sex sex="sex">女</sex>
<age age="age">44</age>
<address address="address">中国</address>
</node>
<node id="4">
<id id="id">4</id>
<name name="name">张三4</name>
<sex sex="sex">男</sex>
<age age="age">50</age>
<address address="address">中国</address>
</node>
<node id="5">
<id id="id">5</id>
<name name="name">张三5</name>
<sex sex="sex">男</sex>
<age age="age">67</age>
<address address="address">中国</address>
</node>
<node id="6">
<id id="id">6</id>
<name name="name">张三6</name>
<sex sex="sex">女</sex>
<age age="age">25</age>
<address address="address">中国</address>
</node>
<node id="7">
<id id="id">7</id>
<name name="name">张三7</name>
<sex sex="sex">女</sex>
<age age="age">53</age>
<address address="address">中国</address>
</node>
<node id="8">
<id id="id">8</id>
<name name="name">张三8</name>
<sex sex="sex">男</sex>
<age age="age">84</age>
<address address="address">中国</address>
</node>
<node id="9">
<id id="id">9</id>
<name name="name">张三9</name>
<sex sex="sex">男</sex>
<age age="age">94</age>
<address address="address">中国</address>
</node>
<node id="10">
<id id="id">10</id>
<name name="name">张三10</name>
<sex sex="sex">女</sex>
<age age="age">48</age>
<address address="address">中国</address>
</node>
</Person>
</root>
运行xml2Sql()方法,则可以将d盘中创建的person.xml文件进行解析,并转成POJO,此时如果有数据库就可以将转成的POJO保存的数据库中了。
总结一下,该例子中用到的重要知识点:java的反射,dom4j解析。
还有一个比较实用的工具类Map和POJO之间的转化。
永久链接:http://kevin12.iteye.com/blog/1940281
发表评论
-
VMware中安装了ubuntu全屏设置
2016-01-18 00:09 2661在VMware虚拟机下的linux无法全屏的问题: 在VMwa ... -
Could not set the project description for 'hotelseqbid.ws' because the project d
2016-01-13 17:21 3530用eclipse 对项目进行Maven>Update P ... -
ASCII码值表
2014-03-30 14:23 912ASCII码值表 来源:http://blog.csdn.n ... -
Invalid character '\n' in value part of property(Oracle)
2013-10-12 17:11 4544链接地址:http://kevin12.i ... -
org.jbpm.api.JbpmException: no jBPM DB schema: no JBPM4_EXECUTION table
2013-09-30 14:37 3618链接地址:http://kevin12.iteye.com/b ... -
org.dom4j.DocumentException:Invalid byte 2 of 2-byte UTF-8 sequence
2013-09-10 16:48 1814今天做工作流项目(jbpm4),将流程文件导出成xml到客户端 ... -
javascript 动态显示当前时间(系统时间)和指定时间差
2013-08-24 15:04 2101最近做流程项目计算流程总耗时用到了动态显示总耗时的时间,就是用 ... -
android的AutoCompleteTextView和MultiAutoCompleteTextView控件
2013-08-04 22:57 1163AutoCompleteTextView:自动完成输入内容的控 ... -
Description Resource Path Location Type Project has no default.properties file!
2013-03-04 22:39 2042在eclipse中创建android项目时候,通过File-- ... -
jQuery调用JSON时,net.sf.json.JSONException: There is a cycle in the hierarchy
2013-01-09 17:12 967jQuery调用JSON时,net.sf.js ... -
spring配置异常
2013-01-06 12:08 807异常 org.springframework.orm.hibe ...
相关推荐
Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc
dom4j解析xml文件代码示例 dom4j解析xml文件代码示例 dom4j解析xml文件代码示例
使用 dom4j 解析 XML dom4j 解析 XML dom4j解析xml
1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件
dom4j解析xml文件的压缩包,完整版。对jdom进行了封装。包含源码,jar包以及所需的全部内容。
dom4j解析xml实例,dom4j解析xml实例,dom4j解析xml实例,
本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个示例XML文档,然后使用同一个解析器修改。与W3C DOM API相比,使用dom4j所包含的...
dom4j解析XML文件格式dom4j解析XML文件格式dom4j解析XML文件格式
dom4j解析XML必备jardom4j解析XML必备jardom4j解析XML必备jardom4j解析XML必备jar
Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题
很详细的文档 可以借鉴下 希望对你有帮助
一个关于用dom4j解析xml,遍历xml,建立xml的简单例子
java dom4j解析xml (详细注释)
本人自己研究的解析方法,主要用dom4j解析XML文件,进而获取里面的信息
分别使用DOM和DOM4j解析XML文件,因为目前使用最广泛的是DOM4j所以只写了用DOM4j对XML进行增删改查。
完整的讲解一个dom4j对xml的增删改查
dom4j解析xml,利用反射机制.将解析出来的信息保存到一个类当中
// SAXReader就是一个管道,用一个流的方式,把xml文件读出来 // // SAXReader reader = new SAXReader(); //User.hbm.xml表示你要解析的xml文档 // Document document = reader.read(new File("User.hbm.xml")...
使用Dom4j解析XML文件的jar包.
dom4j解析XML文档.ppt