要生成和解析如下格式的xml文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <Message xmlns:xs="http://www.w3.org/2001/XMLSchema">
  4. <User>
  5. <id>1</id>
  6. <name>李寻欢</name>
  7. <age>30</age>
  8. <Address>
  9. <id>1</id>
  10. <province>广东省</province>
  11. <city>广州市</city>
  12. <area>越秀区</area>
  13. <street>环市东路</street>
  14. </Address>
  15. </User>
  16. </Message>

  1、两个数据实体类

    1)User类

  1. /**
  2. * @Description: 用户
  3. */
  4. public class User {
  5.  
  6. private Long id;
  7.  
  8. //姓名
  9. private String name;
  10. //年龄
  11. private Integer age;
  12. //地址
  13. private Address address;
  14.  
  15. public Long getId() {
  16. return id;
  17. }
  18.  
  19. public void setId(Long id) {
  20. this.id = id;
  21. }
  22.  
  23. public String getName() {
  24. return name;
  25. }
  26.  
  27. public void setName(String name) {
  28. this.name = name;
  29. }
  30.  
  31. public Integer getAge() {
  32. return age;
  33. }
  34.  
  35. public void setAge(Integer age) {
  36. this.age = age;
  37. }
  38.  
  39. public Address getAddress() {
  40. return address;
  41. }
  42.  
  43. public void setAddress(Address address) {
  44. this.address = address;
  45. }
  46. }

    2)Address类

  1. /**
  2. *
  3. * @Description: 地址
  4. */
  5. public class Address {
  6.  
  7. private Long id;
  8. //省份
  9. private String province;
  10. //城市
  11. private String city;
  12. //区县
  13. private String area;
  14. //街道
  15. private String street;
  16.  
  17. public Long getId() {
  18. return id;
  19. }
  20.  
  21. public void setId(Long id) {
  22. this.id = id;
  23. }
  24.  
  25. public String getProvince() {
  26. return province;
  27. }
  28.  
  29. public void setProvince(String province) {
  30. this.province = province;
  31. }
  32.  
  33. public String getCity() {
  34. return city;
  35. }
  36.  
  37. public void setCity(String city) {
  38. this.city = city;
  39. }
  40.  
  41. public String getArea() {
  42. return area;
  43. }
  44.  
  45. public void setArea(String area) {
  46. this.area = area;
  47. }
  48.  
  49. public String getStreet() {
  50. return street;
  51. }
  52.  
  53. public void setStreet(String street) {
  54. this.street = street;
  55. }
  56. }

  2、使用dom4j生成xml和解析xml的工具类

  1. import java.io.BufferedWriter;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.OutputStreamWriter;
  6. import java.util.HashMap;
  7. import java.util.Iterator;
  8. import java.util.Map;
  9.  
  10. import org.dom4j.Document;
  11. import org.dom4j.DocumentException;
  12. import org.dom4j.DocumentHelper;
  13. import org.dom4j.Element;
  14. import org.dom4j.io.OutputFormat;
  15. import org.dom4j.io.SAXReader;
  16. import org.dom4j.io.XMLWriter;
  17.  
  18. /**
  19. *
  20. * @Description: Xml生成解析工具
  21. * @author Luxh
  22. */
  23. public class XmlUtil {
  24.  
  25. /**
  26. * 生成xml文档
  27. * @param user 用户信息
  28. * @return
  29. */
  30. private static Document generateDocument(User user) {
  31.  
  32. Document document = DocumentHelper.createDocument();
  33.  
  34. //添加元素 Message
  35. Element messageElement = document.addElement("Message");
  36.  
  37. //给Message元素添加属性 xmlns:xs="http://www.w3.org/2001/XMLSchema"
  38. messageElement.addAttribute("xmlns:xs", "http://www.w3.org/2001/XMLSchema");
  39.  
  40. //添加元素 User
  41. Element userElement = messageElement.addElement("User");
  42.  
  43. //添加User子元素 id
  44. Element idElement = userElement.addElement("id");
  45. //给id元素赋值
  46. idElement.setText(String.valueOf(user.getId()));
  47.  
  48. //添加User子元素 name
  49. Element nameElement = userElement.addElement("name");
  50. //给name元素赋值
  51. nameElement.setText(user.getName());
  52.  
  53. //添加User子元素 age
  54. Element ageElement = userElement.addElement("age");
  55. //给age元素赋值
  56. ageElement.setText(String.valueOf(user.getAge()));
  57.  
  58. //添加User子元素 Address
  59. Element addressElement = userElement.addElement("Address");
  60.  
  61. //添加Address子元素 id
  62. Element addressIdElement = addressElement.addElement("id");
  63. //给id元素赋值
  64. addressIdElement.setText(String.valueOf(user.getAddress().getId()));
  65.  
  66. //添加Address子元素 province
  67. Element provinceElement = addressElement.addElement("province");
  68. //给province元素赋值
  69. provinceElement.setText(user.getAddress().getProvince());
  70.  
  71. //添加Address子元素 city
  72. Element cityElement = addressElement.addElement("city");
  73. //给city元素赋值
  74. cityElement.setText(user.getAddress().getCity());
  75.  
  76. //添加Address子元素 area
  77. Element areaElement = addressElement.addElement("area");
  78. //给area元素赋值
  79. areaElement.setText(user.getAddress().getArea());
  80.  
  81. //添加Address子元素 street
  82. Element streetElement = addressElement.addElement("street");
  83. //给street元素赋值
  84. streetElement.setText(user.getAddress().getStreet());
  85.  
  86. return document;
  87. }
  88.  
  89. /**
  90. * 生成xml文件
  91. */
  92. public static void generateXmlFile(User user) {
  93.  
  94. Document document = generateDocument(user);
  95. XMLWriter out = null;
  96.  
  97. BufferedWriter bw = null;
  98. OutputStreamWriter osw = null;
  99. FileOutputStream fos = null;
  100.  
  101. try {
  102. File xmlFile = new File("D:/user.xml");//输出xml的路径
  103. fos = new FileOutputStream(xmlFile);
  104. osw = new OutputStreamWriter(fos,"UTF-8");//指定编码,防止写中文乱码
  105. bw = new BufferedWriter(osw);
  106.  
  107. //对xml输出格式化
  108. OutputFormat format = OutputFormat.createPrettyPrint();
  109. format.setEncoding("UTF-8");
  110. out = new XMLWriter(bw, format);
  111. out.write(document);
  112.  
  113. } catch (IOException e) {
  114. e.printStackTrace();
  115. }finally {
  116. try {
  117. if(out != null) {
  118. out.close();
  119. }
  120. if(bw != null) {
  121. bw.close();
  122. }
  123. if(osw != null) {
  124. osw.close();
  125. }
  126. if(fos != null) {
  127. fos.close();
  128. }
  129.  
  130. } catch (IOException e) {
  131. e.printStackTrace();
  132. }
  133. }
  134. }
  135.  
  136. /**
  137. * 解析xml文件
  138. * @param xmlFile
  139. * @return
  140. * @throws DocumentException
  141. */
  142. public static User analyzeXmlFile(File xmlFile) throws DocumentException {
  143.  
  144. SAXReader saxReader = new SAXReader();
  145. Document document = saxReader.read(xmlFile);
  146. //获取根元素Message
  147. Element messageElement = document.getRootElement();
  148.  
  149. //获取Message元素下的子元素
  150. Iterator<Element> oneLevelElementItor = messageElement.elementIterator();
  151. Map<String,String> userAttrMap = new HashMap<String,String>();
  152. Map<String,String> addressAttrMap = new HashMap<String,String>();
  153.  
  154. while(oneLevelElementItor.hasNext()){
  155. Element e1 = oneLevelElementItor.next();
  156. System.out.println("Message子元素:"+e1.getName());
  157. //获取User元素下的子元素
  158. Iterator<Element> twoLevelElementItor = e1.elementIterator();
  159. while(twoLevelElementItor.hasNext()) {
  160. Element e2 = twoLevelElementItor.next();
  161. System.out.println("User子元素:"+e2.getName());
  162. userAttrMap.put(e2.getName(), e2.getText());
  163.  
  164. //获取Address下的子元素
  165. if("Address".equals(e2.getName())) {
  166. Iterator<Element> threeLevelElementItor = e2.elementIterator();
  167. while(threeLevelElementItor.hasNext()) {
  168. Element e3 = threeLevelElementItor.next();
  169. System.out.println("Address子元素:"+e3.getName());
  170. addressAttrMap.put(e3.getName(), e3.getText());
  171. }
  172.  
  173. }
  174. }
  175.  
  176. }
  177.  
  178. //将解析出来的数据封装成User
  179. User user = new User();
  180. user.setId(Long.valueOf(userAttrMap.get("id")));
  181. user.setName(userAttrMap.get("name"));
  182. user.setAge(Integer.valueOf(userAttrMap.get("age")));
  183.  
  184. Address address = new Address();
  185. address.setId(Long.valueOf(addressAttrMap.get("id")));
  186. address.setProvince(addressAttrMap.get("province"));
  187. address.setCity(addressAttrMap.get("city"));
  188. address.setArea(addressAttrMap.get("area"));
  189. address.setStreet(addressAttrMap.get("street"));
  190.  
  191. user.setAddress(address);
  192. return user;
  193. }
  194.  
  195. }

  3、测试

  1. import java.io.File;
  2.  
  3. import org.dom4j.DocumentException;
  4. import org.junit.Test;
  5.  
  6. public class UserXmlTest {
  7.  
  8. /**
  9. * 生成xml文件
  10. */
  11. @Test
  12. public void testGenerateXml() {
  13.  
  14. //构造一个用户信息
  15. User user = new User();
  16. user.setId(1L);
  17. user.setName("李寻欢");
  18. user.setAge(30);
  19.  
  20. Address address = new Address();
  21. address.setId(1L);
  22. address.setProvince("广东省");
  23. address.setCity("广州市");
  24. address.setArea("越秀区");
  25. address.setStreet("环市东路");
  26.  
  27. user.setAddress(address);
  28.  
  29. XmlUtil.generateXmlFile(user);
  30. }
  31.  
  32. /**
  33. * 解析xml文件
  34. * @throws DocumentException
  35. */
  36. @Test
  37. public void testAnalyzeXmlFile() throws DocumentException {
  38. File xmlFile = new File("D:/user.xml");
  39. User user = XmlUtil.analyzeXmlFile(xmlFile);
  40. System.out.println("user'name is :"+user.getName());
  41. System.out.println("user'address'province is :"+user.getAddress().getProvince());
  42. }
  43. }

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

  1. 使用dom4j创建和解析xml文件

    使用dom4j创建和解析xml文件 在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j. 下面我就以代码来讲解一下如何使用dom4j来创建x ...

  2. DOM4J生成、解析XML实例

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterato ...

  3. C++生成和解析XML文件

    1.xml 指可扩展标记语言(EXtensible Markup Language) 2.xml 是一种标记语言,类似html 3.xml 的设计宗旨是传输数据,而非显示数据 4.xml 标签没有被预 ...

  4. dom4j生成、解析xml

    /** * 创建xml * @param obj 泛型对象 * @param entityPropertys 泛型对象的List集合 * @param Encode XML自定义编码类型 * @par ...

  5. C#生成、解析xml文件以及处理报错原因

    转载自:http://blog.csdn.net/lilinoscar/article/details/21027319 简单的介绍一下生成XML文件以及解析,因为有些数据不一定放到数据库,减少链接数 ...

  6. 使用Dom4j的xPath解析xml文件------xpath语法

    官方语法地址:http//www.w3school.com.cn/xpath/index.asp xpath使用路径表达式来选取xml文档中的节点或节点集.节点是通过沿着路径(path)或者步(ste ...

  7. Java中使用DOM4J来生成xml文件和解析xml文件

    一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...

  8. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  9. 使用DOM4J解析XMl文件与读取XML文件

    XML文件 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id ...

随机推荐

  1. Android.mk与jni目录的关系

    附1: Android.mk与jni目录的关系: 在某目录下,如/src/modules1/下存放Android.mk和Application.mk,调用ndk-build试图编译时,会遇到如下错误: ...

  2. android平台菜单返回键监听

    //声明 void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event); //实现 //按键控制(检测onKeyReleased有反 ...

  3. ExtJS3.4升级ExtJS4.2的问题汇总(转)

    ExtJS3.4升级ExtJS4.2的问题汇总 昨天心血来潮,想把自己用extjs3.4作为UI的一个原型升级到最新的extjs4.2.2. 几年前曾经将原型从2.1升级到3.4,对于extjs的版本 ...

  4. 转:LoadRunner中参数化技术详解

    LoadRunner中参数化技术详解 LoadRunner在录制脚本的时候,只是忠实的记录了所有从客户端发送到服务器的数据,而在进行性能测试的时候,为了更接近真实的模拟现实应用,对于某些信息需要每次提 ...

  5. maven学习笔记 1

    1    概述 1.1 Maven是什么 1.2 为什么要用Maven 2    怎么用Maven 2.1 Maven仓库 2.2 Maven安装 2.3 Eclipse插件 2.4 Maven常用命 ...

  6. Windows下python安装MySQLdb

    安装MySQLdb需要在电脑上安装MySQL connector C,只需要这个connector就好,不需要把mysql装全. 另外,需要安装VC for python提供编译. 到官网上下载脚本进 ...

  7. C++读取excel特定行列中的数据

    可以通过COM API调用才是正解,不过需要编写COM接口类,Excel对象库的接口太多了……不过可以用工具自动生成. 我最近也在用VC操作Excel,在VC中可以这样做,在任何一个cpp文件中加入下 ...

  8. mysql查询数据库约束

    SELECT * FROM information_schema.`TABLE_CONSTRAINTS` where TABLE_SCHEMA='mold' and TABLE_NAME='tplmi ...

  9. shell与if相关参数

    [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真. [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真. [ ...

  10. linux操作命令实验

    实验内容:文件操作与用户操作实验 实验设备(环境):电脑.Vmware WorkStation 实验步骤: 一.创建新用户bob 目的:练习useradd命令 二.为新用户bob设置口令 目的:练习p ...