您的位置:首页 > 其它

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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: