dom4j生成,解析xml文件
2013-09-16 12:30
429 查看
<?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>
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;
}
}
<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>
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;
}
}
相关文章推荐
- dom4j生成和解析xml文件
- dom4j生成xml文件,解析后出现中文乱码问题
- 使用Dom4j解析和生成XML文件时的一些小tips
- dom4j生成和解析xml文件
- 解析与生成XML文件或字符串 dom4j工具包
- dom4j解析与生成xml文件
- dom4j解析、修改、生成xml文件(转)
- Java生成和解析XML格式文件和字符串的实例代码【dom4j中的SAXReader对象读取并解析xml文件】
- dom4j 解析多个xml文件 生成到同一个xml文件中
- DOM4J对XML文件的生成和解析
- 用DOM4j解析xml文件,获得所有节点信息 http://blog.csdn.net/yizhizouxiaqu/archive/2009/12/10/4977122.aspx
- xml文件--DOM4J方式解析xml文件
- XML的解析和生成(dom4j)
- 解决dom4j解析xml文件时访问DTD文件问题
- Dom4j解析、生成XML文件
- XML_使用dom4j对xml文件进行解析_.flv
- 使用Dom4j生成xml文件(utf-8编码)
- 在已知XML文件内容时,使用dom4j简单解析XML(String类型的XML)(用于服务器端)
- 采用dom4j解析XML文件实现Java与oracle连接
- Android学习记录(1)—Android中XML文件的序列化生成与解析