项目中需要用到导出xml和导入xml功能,故总结一下自己所做的:
用到的技术
XMLUtil为XML工具类:
public class XMLUtil {
private final static org.slf4j.Logger logger = LoggerFactory.getLogger(XMLUtil.class);
private XMLUtil() {
}
/**
* 根据字符串创建 document 对象
*
* @param xmlStr
* @return
*/
public static Document getDocumentByString(String xmlStr) {
Document doc = null;
try {
doc = DocumentHelper.parseText(xmlStr);
} catch (DocumentException e) {
logger.error("字符串转换成XML失败:" + e.getMessage());
}
return doc;
}
/**
* 设置response的返回信息
* @param response
* @param fileName
* @return XMLWriter
*/
public static XMLWriter getXMLWriter(HttpServletResponse response,String fileName) {
XMLWriter writer = null;
OutputStream os = null;
try {
//定义xml文件的格式
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
//准备输出xml文件
writer =new XMLWriter(format);
response.setContentType("application/xml");
response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes(), "iso-8859-1"));
os = response.getOutputStream();
writer.setOutputStream(os);
}catch (Exception e){
logger.error("导出xml时获取XMLWriter出错:"+e);
}finally {
if(null != os){
try {
os.close();
} catch (IOException e) {
logger.error("关闭outputStream出错:"+e);
}
}
}
return writer;
}
/**
* 根据file获得Document
* @param file MultipartFile
* @return Document
*/
public static Document getDocumentByFile(MultipartFile file){
File file1 = new File(file.getOriginalFilename());
Document document = null;
try {
file.transferTo(file1);
//创建SAXReader对象
SAXReader reader = new SAXReader();
//读取文件 转换成Document
document = reader.read(file1);
} catch (IOException e) {
document = null;
logger.error("文件转换出错:"+e);
} catch (DocumentException e) {
document = null;
logger.error("读取文件出错:"+e);
}
return document;
}
}
导出:
1、response设置输出的ContentType和Header
2、利用XMLWriter的write方法输出document对象
核心代码:
writer = XMLUtil.getXMLWriter(response,"导出文件名");
writer.write(document);
导入:
1、利用SpringMVC的MultipartFile上传文件,并使用SAXReader
扫描二维码关注公众号,回复:
2970706 查看本文章
读取文件。
核心代码:
XMLUtil.getDocumentByFile();
controller完整代码:
/**
* 导出模版,模版为xml格式
* @param response
* @param id
*/
@RequestMapping(value = "/exportTmp")
public void exportTmp(HttpServletResponse response, String id){
if(StringUtils.isNotBlank(id)){
XMLWriter writer = null;
try {
//创建xml
Element root = DocumentHelper.createElement("Person");
Document document = DocumentHelper.createDocument(root);
Element element1 = root.addElement("学生");
element1.addElement("姓名").addText("小章");
element1.addElement("年龄").addText("21");
Element element2 = root.addElement("学生");
element2.addElement("姓名").addText("小红").addElement("爱好").addText("唱歌");
element2.addElement("年龄").addText("22");
writer = XMLUtil.getXMLWriter(response,"导出xml.xml");
writer.write(document);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(null != writer){
writer.close();
}
} catch (IOException e) {
logger.error("关闭XMLWriter出错:"+e);
}
}
}
}
/**
* 导入模版,格式为xml
* @param file
* @return
*/
@RequestMapping(value = "/importXml",method = {RequestMethod.POST})
@ResponseBody
public DwzJsonResponse importXml(@RequestParam(value="file",required=false) MultipartFile file){
if(file == null || file.getSize() == 0){
return new DwzJsonResponse("201", "请选择有效文件", "", "", "", "");
}
if(!file.getOriginalFilename().endsWith(".xml")){
return new DwzJsonResponse("201", "请选择有效的xml文件", "", "", "", "");
}
Document document = XMLUtil.getDocumentByFile(file);
if(null != document){
Element root = document.getRootElement();
listNodes(root);
return new DwzJsonResponse("200", "导入成功", "", "", "closeCurrent", "");
}else{
return new DwzJsonResponse("201", "导入失败", "", "", "", "");
}
}
//遍历当前节点下的所有节点
public void listNodes(Element node){
System.out.println("当前节点的名称:" + node.getName());
//如果当前节点内容不为空,则输出
if(!(node.getTextTrim().equals(""))){
System.out.println( node.getName() + ":" + node.getText());
}
//同时迭代当前节点下面的所有子节点
//使用递归
Iterator<Element> iterator = node.elementIterator();
while(iterator.hasNext()){
Element e = iterator.next();
listNodes(e);
}
}
导入页面:
<form enctype="multipart/form-data" method="post" action="xxx"
class="pageForm required-validate" onsubmit="return iframeCallback(this, dialogAjaxDone1)">
<div class="pageFormContent" layoutH="60">
<div style="padding-top: 10px;">
<label>选择xml文件:</label>
<input id="file" type="file" name="file"
uploaderoption="{
swf:'uploadify/scripts/uploadify.swf',
uploader:'uploadify/scripts/uploadify.swf',
fileTypeDesc:'*.xml',
fileTypeExts:'*.xml',
buttonText:'浏览',
auto:true,
multi:false,
}" />
</div>
</div>
<!--底部横条---start-->
<div class="formBar">
<div style="width: 550px; height: 25px;">
<ul>
<li><div class="buttonActive">
<div class="buttonContent">
<button type="submit">保存</button>
</div>
</div></li>
<li>
<div class="button">
<div class="buttonContent">
<button type="button" class="close">退出</button>
</div>
</div>
</li>
</ul>
</div>
</div>
<!--底部横条---end-->
</form>