dom4j生成和解析xml文件
要生成和解析如下格式的xml文件:
<?xml version="1.0" encoding="UTF-8"?> <Message xmlns:xs="http://www.w3.org/2001/XMLSchema">
<User>
<id>1</id>
<name>李寻欢</name>
<age>30</age>
<Address>
<id>1</id>
<province>广东省</province>
<city>广州市</city>
<area>越秀区</area>
<street>环市东路</street>
</Address>
</User>
</Message>

1、两个数据实体类
1)User类

/**
* @Description: 用户
*/
public class User { private Long id; //姓名
private String name;
//年龄
private Integer age;
//地址
private Address address; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Address getAddress() {
return address;
} public void setAddress(Address address) {
this.address = address;
}
}
2)Address类

/**
*
* @Description: 地址
*/
public class Address { private Long id;
//省份
private String province;
//城市
private String city;
//区县
private String area;
//街道
private String street; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getProvince() {
return province;
} public void setProvince(String province) {
this.province = province;
} public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
} public String getArea() {
return area;
} public void setArea(String area) {
this.area = area;
} public String getStreet() {
return street;
} public void setStreet(String street) {
this.street = street;
}
}
2、使用dom4j生成xml和解析xml的工具类
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Iterator;
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; /**
*
* @Description: Xml生成解析工具
* @author Luxh
*/
public class XmlUtil { /**
* 生成xml文档
* @param user 用户信息
* @return
*/
private static Document generateDocument(User user) { Document document = DocumentHelper.createDocument(); //添加元素 Message
Element messageElement = document.addElement("Message"); //给Message元素添加属性 xmlns:xs="http://www.w3.org/2001/XMLSchema"
messageElement.addAttribute("xmlns:xs", "http://www.w3.org/2001/XMLSchema"); //添加元素 User
Element userElement = messageElement.addElement("User"); //添加User子元素 id
Element idElement = userElement.addElement("id");
//给id元素赋值
idElement.setText(String.valueOf(user.getId())); //添加User子元素 name
Element nameElement = userElement.addElement("name");
//给name元素赋值
nameElement.setText(user.getName()); //添加User子元素 age
Element ageElement = userElement.addElement("age");
//给age元素赋值
ageElement.setText(String.valueOf(user.getAge())); //添加User子元素 Address
Element addressElement = userElement.addElement("Address"); //添加Address子元素 id
Element addressIdElement = addressElement.addElement("id");
//给id元素赋值
addressIdElement.setText(String.valueOf(user.getAddress().getId())); //添加Address子元素 province
Element provinceElement = addressElement.addElement("province");
//给province元素赋值
provinceElement.setText(user.getAddress().getProvince()); //添加Address子元素 city
Element cityElement = addressElement.addElement("city");
//给city元素赋值
cityElement.setText(user.getAddress().getCity()); //添加Address子元素 area
Element areaElement = addressElement.addElement("area");
//给area元素赋值
areaElement.setText(user.getAddress().getArea()); //添加Address子元素 street
Element streetElement = addressElement.addElement("street");
//给street元素赋值
streetElement.setText(user.getAddress().getStreet()); return document;
} /**
* 生成xml文件
*/
public static void generateXmlFile(User user) { Document document = generateDocument(user);
XMLWriter out = null; BufferedWriter bw = null;
OutputStreamWriter osw = null;
FileOutputStream fos = null; try {
File xmlFile = new File("D:/user.xml");//输出xml的路径
fos = new FileOutputStream(xmlFile);
osw = new OutputStreamWriter(fos,"UTF-8");//指定编码,防止写中文乱码
bw = new BufferedWriter(osw); //对xml输出格式化
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
out = new XMLWriter(bw, format);
out.write(document); } catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(out != null) {
out.close();
}
if(bw != null) {
bw.close();
}
if(osw != null) {
osw.close();
}
if(fos != null) {
fos.close();
} } catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 解析xml文件
* @param xmlFile
* @return
* @throws DocumentException
*/
public static User analyzeXmlFile(File xmlFile) throws DocumentException { SAXReader saxReader = new SAXReader();
Document document = saxReader.read(xmlFile);
//获取根元素Message
Element messageElement = document.getRootElement(); //获取Message元素下的子元素
Iterator<Element> oneLevelElementItor = messageElement.elementIterator();
Map<String,String> userAttrMap = new HashMap<String,String>();
Map<String,String> addressAttrMap = new HashMap<String,String>(); while(oneLevelElementItor.hasNext()){
Element e1 = oneLevelElementItor.next();
System.out.println("Message子元素:"+e1.getName());
//获取User元素下的子元素
Iterator<Element> twoLevelElementItor = e1.elementIterator();
while(twoLevelElementItor.hasNext()) {
Element e2 = twoLevelElementItor.next();
System.out.println("User子元素:"+e2.getName());
userAttrMap.put(e2.getName(), e2.getText()); //获取Address下的子元素
if("Address".equals(e2.getName())) {
Iterator<Element> threeLevelElementItor = e2.elementIterator();
while(threeLevelElementItor.hasNext()) {
Element e3 = threeLevelElementItor.next();
System.out.println("Address子元素:"+e3.getName());
addressAttrMap.put(e3.getName(), e3.getText());
} }
} } //将解析出来的数据封装成User
User user = new User();
user.setId(Long.valueOf(userAttrMap.get("id")));
user.setName(userAttrMap.get("name"));
user.setAge(Integer.valueOf(userAttrMap.get("age"))); Address address = new Address();
address.setId(Long.valueOf(addressAttrMap.get("id")));
address.setProvince(addressAttrMap.get("province"));
address.setCity(addressAttrMap.get("city"));
address.setArea(addressAttrMap.get("area"));
address.setStreet(addressAttrMap.get("street")); user.setAddress(address);
return user;
} }
3、测试
import java.io.File; import org.dom4j.DocumentException;
import org.junit.Test; public class UserXmlTest { /**
* 生成xml文件
*/
@Test
public void testGenerateXml() { //构造一个用户信息
User user = new User();
user.setId(1L);
user.setName("李寻欢");
user.setAge(30); Address address = new Address();
address.setId(1L);
address.setProvince("广东省");
address.setCity("广州市");
address.setArea("越秀区");
address.setStreet("环市东路"); user.setAddress(address); XmlUtil.generateXmlFile(user);
} /**
* 解析xml文件
* @throws DocumentException
*/
@Test
public void testAnalyzeXmlFile() throws DocumentException {
File xmlFile = new File("D:/user.xml");
User user = XmlUtil.analyzeXmlFile(xmlFile);
System.out.println("user'name is :"+user.getName());
System.out.println("user'address'province is :"+user.getAddress().getProvince());
}
}
dom4j生成和解析xml文件的更多相关文章
- 使用dom4j创建和解析xml文件
使用dom4j创建和解析xml文件 在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j. 下面我就以代码来讲解一下如何使用dom4j来创建x ...
- DOM4J生成、解析XML实例
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterato ...
- C++生成和解析XML文件
1.xml 指可扩展标记语言(EXtensible Markup Language) 2.xml 是一种标记语言,类似html 3.xml 的设计宗旨是传输数据,而非显示数据 4.xml 标签没有被预 ...
- dom4j生成、解析xml
/** * 创建xml * @param obj 泛型对象 * @param entityPropertys 泛型对象的List集合 * @param Encode XML自定义编码类型 * @par ...
- C#生成、解析xml文件以及处理报错原因
转载自:http://blog.csdn.net/lilinoscar/article/details/21027319 简单的介绍一下生成XML文件以及解析,因为有些数据不一定放到数据库,减少链接数 ...
- 使用Dom4j的xPath解析xml文件------xpath语法
官方语法地址:http//www.w3school.com.cn/xpath/index.asp xpath使用路径表达式来选取xml文档中的节点或节点集.节点是通过沿着路径(path)或者步(ste ...
- Java中使用DOM4J来生成xml文件和解析xml文件
一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...
- java中采用dom4j解析xml文件
一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...
- 使用DOM4J解析XMl文件与读取XML文件
XML文件 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id ...
随机推荐
- HDU 5768 Lucky7 (容斥原理 + 中国剩余定理 + 状态压缩 + 带膜乘法)
题意:……应该不用我说了,看起来就很容斥原理,很中国剩余定理…… 方法:因为题目中的n最大是15,使用状态压缩可以将所有的组合都举出来,然后再拆开成数组,进行中国剩余定理的运算,中国剩余定理能够求出同 ...
- PAT乙1001
我脑洞大了..... 以为是个找规律..... 原来只是模拟..... 我相信肯定是有规律的..... 但是我就是不愿意了..... #include<cstdio> #include&l ...
- MyEclipse8.5优化经验
第一步: 取消自动validation validation有一堆,什么xml.jsp.jsf.js等等,我们没有必要全部都去自动校验一下,只是需要的时候才会手工校验一下! 取消方法: ...
- Windows应用程序要点
一个完整的Windows应用程序除了WinMain函数外,还包含用于处理用户动作和窗口消息的窗口函数. Windows应用程序具有的一些特性: 消息驱动机制 图形设备接口(GDI) 基于资源的程序设 ...
- hdu_2255_奔小康赚大钱(KM带权二分匹配板子)
题目连接:hdu_2255_奔小康赚大钱 存个板子 /* 其实在求最大 最小的时候只要用一个模板就行了, 把边的权值去相反数即可得到另外一个.求结果的时候再去 相反数即可,最大最小有一些地方不同.. ...
- 保存iptables的防火墙规则的方法【转载】
转自: 保存iptables的防火墙规则的方法 - 51CTO.COMhttp://os.51cto.com/art/201103/249504.htm 保存iptables的防火墙规则的方法如下: ...
- MQ日常维护操作手册
假设队列管理器为QMgrName,以下所有使用QMgrName的地方您都可以替换成您维护的mq队列管理器名称. 一.MQ的启动与停止 用root用户启/停需要root用户包含在mqm组中. 1.MQ的 ...
- 卸载get-apt安装的软件
我们都知道安装软件最简单的方法是apt-get install,但是卸载就不常用了,如何卸载呢? sudo apt-get remove android-tools-adb
- httpwebrequest 模拟登录 获取cookies 以前的代码,记录备忘!
2个类,一个基类,一个构建头信息调用类 关于如何获取到post中的内容,你之需要用http抓包工具把你与目标网站的请求信息抓下来后,打开分析下按照抓下来的包中的数 据进行构建就行了 using Sys ...
- zf-关于荆州图片链接和弹出页面问题
target="_blank" 属性不能写在div 里 所以我在里面加了个a标签 这个属性的作用就是弹出一个新的页面,不会在原先的页面上换地址 如果 style 的加载图片卸载cs ...