项目笔记:创建XML文件和导出功能
一、创建XML文件:
要生成的XML结构:

//创建文件夹
private void createFilePah(String path){
File file = new File(path);
if(!file.exists()){
file.mkdirs();
}
} @Override
public void createXML() {
try{
Integer softLicBType = ;
Integer softLicWType = ;//类型,判断来创建正版还是非正版
//根据Type来获取非正版数据List
List<GenuineSerialNumberManagement> softLicB = genuineSerialNumberManagementDao.queryByType(softLicBType);
String pathB = ReadConfigFileUtil.getValue(SystemStatics.ROOTDIR) + SystemStatics.PATH_PAW + File.separator+"genuineSerialNumberManagement";
createFilePah(pathB);//判断文件夹路径是否存,不存在就创建文件夹
String XMLPathB =pathB +File.separator + "SoftLicB.xml";//组合非正版文件路径
List<GenuineSerialNumberManagement> softLicW = genuineSerialNumberManagementDao.queryByType(softLicWType);
String pathW = ReadConfigFileUtil.getValue(SystemStatics.ROOTDIR) + SystemStatics.PATH_PAW + File.separator+"genuineSerialNumberManagement";
createFilePah(pathW);
String XMLPathW = pathW+File.separator + "SoftLicW.xml"; Document documentB = DocumentHelper.createDocument();//创建文件
Element rootB = documentB.addElement("SoftLicB");//创建文件根目录
List<Integer> ss = new ArrayList<Integer>();//声明一个空List用于保存softId,当softId已经写过一次时,就不再写而是写它下级的东西
for (GenuineSerialNumberManagement type : softLicB){
if(!ss.contains(type.getSoftId())){//如果不存在就增加进去
ss.add(type.getSoftId());
Element softWare = rootB.addElement("Software");//二级目录,二级目录里面有SoftId和DisplayName
softWare.addAttribute("SoftId", type.getSoftId().toString());
softWare.addAttribute("DisplayName", type.getSoftDisplayName());
//根据type和softId来获取数据list,因为同一个softId下面的东西需要在三级目录上
List<GenuineSerialNumberManagement> softIdB = genuineSerialNumberManagementDao.queryBySoftIdAndType(type.getSoftId(),softLicBType);
for(GenuineSerialNumberManagement soft : softIdB){
Element license = softWare.addElement("license");//三级目录,三级目录里面有Version和value
license.addAttribute("Version", soft.getVersion());
license.addAttribute("value", soft.getSerialNumber());
}
}else{
continue;
}
}
XMLUtil.writeXml(documentB, XMLPathB);//在路径下写入文件 Document documentW = DocumentHelper.createDocument();
Element rootW = documentW.addElement("SoftLicW");
List<Integer> ww = new ArrayList<Integer>();
for(GenuineSerialNumberManagement type : softLicW){
if(!ww.contains(type.getSoftId())){
ww.add(type.getSoftId());
Element softWare = rootW.addElement("Software");
softWare.addAttribute("SoftId", type.getSoftId().toString());
softWare.addAttribute("DisplayName", type.getSoftDisplayName());
List<GenuineSerialNumberManagement> softIdW = genuineSerialNumberManagementDao.queryBySoftIdAndType(type.getSoftId(), softLicWType);
for(GenuineSerialNumberManagement soft : softIdW){
Element license = softWare.addElement("license");
license.addAttribute("Version", soft.getVersion());
license.addAttribute("value", soft.getSerialNumber());
}
}else{
continue;
}
}
XMLUtil.writeXml(documentW, XMLPathW);
}catch(Exception e){
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
}
我们看下与数据库交互的queryBySoftIdAndType
@SuppressWarnings("unchecked")
@Override
public List<GenuineSerialNumberManagement> queryBySoftIdAndType(Integer softId,Integer type) {
return this.getSession().createQuery(" FROM " + this.clazz.getName() + " this WHERE this.softId =(:softId) AND this.type =(:type)")
.setParameter("softId", softId)
.setParameter("type", type)
.list();
}
然后调用该方法即可生成XML
//自动生成xml
genuineSerialNumberManagementService.createXML();
二、导出功能:
<form id="export_serialNumber" action="" style="padding: 0; margin: 0;" method="post" target="_blank">
<input type="hidden" id="exportType" name="genuineSerialNumberManagement.type" value="" />
</form>
//导出规则库
function exportSerialNumber(){
var currentType = $("input[name='serialNumber']:checked").val();
if (currentType == "") {
showMsg("系统提示", "请选择要导出的类型!", false);
return;
}
if ($.checkSession()) {
var $form = $("#export_serialNumber");
var action = "";
try {
$("#exportType").val(currentType);
action = $form.attr("action");
$form.attr("action", "${basePath}/genuineSerialNumberManagementAction_export.do").submit();
} finally {
$form.attr("action", action);
}
}
}
注意form表单里需要加个input隐藏域用于传type值
//导出规则库
public String export() {
log.info("【正版序列号管理--导出规则库:开始】");
try {
if (genuineSerialNumberManagement != null) {
String filePath = ReadConfigFileUtil.getValue(SystemStatics.ROOTDIR) + SystemStatics.PATH_PAW + File.separator+"genuineSerialNumberManagement\\";
// 为下载 做 准备
String fileName = null;
if(genuineSerialNumberManagement.getType()!=null && genuineSerialNumberManagement.getType() == ){
fileName = "SoftLicB.xml";
}
if(genuineSerialNumberManagement.getType()!=null && genuineSerialNumberManagement.getType() == ){
fileName = "SoftLicW.xml";
}
ActionContext.getContext().put("fileName", fileName);
ActionContext.getContext().put("filePath", filePath + fileName);
}
log.info("【正版序列号管理--导出规则库:结束】");
return RETURN_DOWNLOADUI;
} catch (Exception e) {
log.error("【正版序列号管理--导出规则库:失败】", e);
return null;
}
}
项目笔记:创建XML文件和导出功能的更多相关文章
- C#操作XML学习之创建XML文件的同时新建根节点和子节点(多级子节点)
最近工作中遇到一个问题,要求创建一个XML文件,在创建的时候要初始化该XML文档,同时该文档打开后是XML形式,但是后缀名不是.在网上找了好些资料没找到,只能自己试着弄了一下,没想到成功了,把它记下来 ...
- TinyXML2读取和创建XML文件 分类: C/C++ 2015-03-14 13:29 94人阅读 评论(0) 收藏
TinyXML2是simple.small.efficient C++ XML文件解析库!方便易于使用,是对TinyXML的升级改写!源码见本人上传到CSDN的TinyXML2.rar资源:http: ...
- C#创建XML文件并保存
随着XML的普及以及在动态WEB应用程序中大量应用,如何通过.NET创建,删除,修改XML文件变的也来也重要了.一个简单的概念是,XML文件跟大的文本文件并没有什么区别,同时它是先于.NET出现,很多 ...
- Laravel Excel 实现 Excel-CSV 文件导入导出功能
Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便. 它的 Github 地址是:https:// ...
- C#中如何创建xml文件 增、删、改、查 xml节点信息
XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized Markup Lang ...
- IDEA创建xml文件
今天在用IDEA写项目的时候发现,创建xml文件只能通过File手动输入去创建,但在我看的一个学习视频上可以直接创建xml文件,好奇之下研究了一下,作此篇,希望能对需要的朋友有所帮助. 废话就不多说了 ...
- Java笔记_web.xml文件
在JavaEE工程中,web.xml文件是用来初始化配置信息:比如Welcome页面.servlet.servlet-mapping.filter.listener.启动加载级别等,但并不是必须的,一 ...
- .net中创建xml文件的两种方法
.net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...
- Java 创建xml文件和操作xml数据
java中的代码 import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; ...
随机推荐
- Node.js的Buffer那些你可能不知道的用法
在大多数介绍Buffer的文章中,主要是围绕数据拼接和内存分配这两方面的.比如我们使用fs模块来读取文件内容的时候,返回的就是一个Buffer: fs.readFile('filename', fun ...
- 【WPF】自定义控件之远程图片浏览
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- 《java虚拟机》----java内存模型与线程
No1. No2. java内存模型规定了所有的变量都存储在主内存中(Main Memory)中 每条线程还有自己的工作内存(Working Memory) 线程的工作内存中保存了被该线程使用到的变量 ...
- SQL必知必会 -------- order by、where等
一.排序检索数据 1.排序数据:SELECT prod_name FROM Products ORDER BY prod_name(对prod_name列以字母顺序排序数据) ORDER BY子句的位 ...
- luogu P2107 小Z的AK计划
最近复习了一下堆,于是去luogu上找一些简单题写一写 贪心的想,小z不会到一半以后回头去Ak,因为这样从时间上想肯定是不优的,他可以早在之间经过时就AK所以我们可以将所有机房按照横坐标排序可以想到的 ...
- python-爬虫技能升级记录
====== python-爬虫技能升级记录 ====== ===== (一)感知爬虫及爬取流程 =====<code>从简单存取一个页面到 爬取到大量的定量数据,对技术要求更高,以百度百 ...
- redux 初步理解
派发一个 action 给 reducer, reducer 生成了一个新的 state; redux 通过 Store 来保存数据, store.getState 获得数据, 而要更新 state, ...
- 【BZOJ 4361】 4361: isn (DP+树状数组+容斥)
4361: isn Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 218 Solved: 126 Description 给出一个长度为n的序列A( ...
- 【BZOJ 1880】 [Sdoi2009]Elaxia的路线 (最短路树)
1880: [Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. ...
- 【BIT套主席树】COGS257-动态排名系统
题意同BZOJ1901,多组数据,数据范围也不一样.重新写一遍复习一下. #include<iostream> #include<cstdio> #include<cst ...