润乾报表中如何动态的打开不同的XML数据集



在润乾报表中支持多种数据集类型,包括:SQL检索、存储过程、复杂SQL、TXT文件、XML数据集、自定义数据集等。

在自定义数据集的实际应用中,我们遇到这样一个问题:

客户的XML数据文件有很多,想通过设置一个XML数据集然后跟不同的情况打开不同的XML文件。从业务需求上分析,也就是通过动态读取不同XML文件中的数据,然后把数据返回给数据集的过程。

我们分析一下实现的过程是:

用自定义数据集,传入参数为xml文件路径。这样可以通过参数决定从哪个XML文件中读取数据。

下面是实现的demo源代码,其中PraseXML.java是用来解析XML文件,并得到XML的docment,XMLDataSetTest.java是自定义数据集。

PraseXML.java:

import java.io.FileInputStream;
import java.io.InputStream;

import org.jdom.Document;
import org.jdom.input.SAXBuilder;

public class PraseXML {

/**
* 解析XML文件,并得到XML的docment
* @param name 文件名称
* @return
*/
public Document getDoc(String name){
try{
SAXBuilder sb = new SAXBuilder();//使用默认的jdom解析器
Document doc = sb.build(new FileInputStream(name)); //解析XML文件,并得到XML的docment
return doc;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}

XMLDataSetTest.java:

import java.util.List;
import java.util.Vector;

import org.jdom.Document;
import org.jdom.Element;

import com.runqian.report4.dataset.DataSet;
import com.runqian.report4.dataset.IDataSetFactory;
import com.runqian.report4.dataset.Row;
import com.runqian.report4.usermodel.Context;
import com.runqian.report4.usermodel.DataSetConfig;

public class XMLDataSetTest implements IDataSetFactory {

public DataSet createDataSet(Context context, DataSetConfig arg1,
boolean arg2) {
Document doc = null;
String filename = (String) context.getParamValue(”fileName”);
//String filename = “c:/b.xml”;
// 调用PraseXML().getDoc()把XML文件解析成Document,以便处理
doc = new PraseXML().getDoc(filename);
DataSet ds = new DataSet(”ds1″);
// 取得XML文件的根
Element root = doc.getRootElement();// root
List list = root.getChildren();// list coll_jj
// 对根目录下的每个子节点循环

for (int i = 0; i < list.size(); i++) {
// System.err.println(”i>>>>>>>>>>”+i);
// 得到根目录的下一级子节点
Element e = (Element) list.get(i);// 二级
if (”COLL_JJ”.equals(e.getName())) {
List child = e.getChildren();
int m = 0;
for (int j = 0; j < child.size(); j++) {
System.err.println(”j>>>>>>>>>>” + j);
Row row = null;
Element e2 = (Element) child.get(j);// 三级
List uvo = e2.getChildren();
Vector vrow = new Vector();

for (int n = 1; n <= uvo.size(); n++) {
Element e3 = (Element) uvo.get(n – 1);// 四级
if (j == 0) {
ds.addCol(e3.getName());
}
vrow.add(e3.getText());
System.out.println(e3.getText());
}
row = ds.addRow();
if (!vrow.isEmpty()) {
for (int k = 0; k < vrow.size(); k++) {
ds.setData(m + 1, k + 1, vrow.get(k));

}
m++;

}
//
}

}

}
System.out.println(ds.getData(1, 1));
System.out.println(ds.getData(2, 1));
return ds;
}

/**
* 转换列数据值类型
*
* @param value
* 列原值
* @param type
* 列数据类型
* @return Object
*/
public static Object getColValue(String value, String type) {
if (value == null || value.trim().length() == 0) {
return null;
}
if (type.equals(”int”)) {
return Integer.valueOf(value);
} else if (type.equals(”date”)) {
return java.sql.Date.valueOf(value);
} else if (type.equals(”double”)) {
return Double.valueOf(value);
} else {
return value;
}

}

public static void main(String args[]) {

XMLDataSetTest ts = new XMLDataSetTest();
Context cont = new Context();
DataSetConfig ds = null;
boolean arg2 = false;
ts.createDataSet(cont, ds, arg2);

}
}

然后把这两个文件编译成.class后,在报表文件中使用:

然后在数据集中写入自定义数据集的类:

然后我们就可以通过传参数来动态的打开不同的XML数据集了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的影城管理系统,源码+数据库+论文答辩+毕业论文+视频演示 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多生活之,随之就产生了“小徐影城管理系统”,这样就让小徐影城管理系统更加方便简单。 对于本小徐影城管理系统的设计来说,系统开发主要是采用java语言技术,在整个系统的设计应用MySQL数据库来完成数据存储,具体根据小徐影城管理系统的现状来进行开发的,具体根据现实的需求来实现小徐影城管理系统网络化的管理,各类信息有序地进行存储,进入小徐影城管理系统页面之后,方可开始操作主控界面,主要功能包括管理员:首页、个人心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理,用户前台;首页、电影信息、电影资讯、个人心、后台管理、在线客服等功能。 本论文主要讲述了小徐影城管理系统开发背景,该系统它主要是对需求分析和功能需求做了介绍,并且对系统做了详细的测试和总结。具体从业务流程、数据库设计和系统结构等多方面的问题。望能利用先进的计算机技术和网络技术来改变目前的小徐影城管理系统状况,提高管理效率。 关键词:小徐影城管理系统;Spring Boot框架,MySQL数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值