1. 描述编辑
使用场景:电脑某个目录下保存了几个 XML 文件,希望把 XML 文件转换为报表数据源。
其中 Northwind.xml 记录数据格式如下:
<?xml version="1.0" encoding="UTF-8"?> <Northwind> <Customers> <CustomerID>ALFKI</CustomerID> <CompanyName>ALfreds Futterkiste</CompanyName> <ContactName>Maria Anders</ContactName> <ContactTitle>Sales Representative</ContactTitle> <Address>Obere Str.57</Address> <City>Berlin</City> <PostalCode>12209</PostalCode> <Country>Germany</Country> <Phone>030-0074321</Phone> <Fax>030-0076545</Fax> </Customers> </Northwind>
最终实现根据不同的文件名动态获取不同的 XML 中的内容作为报表数据源,如下图所示:
2. 实现思路编辑
FineReport 中可以通过自定义程序数据集来对 XML 字段数据进行解析,再通过参数的方式,动态获取 XML 文件名,最终作为报表数据源。
3. 操作步骤编辑
2.1 定义 XMLColumnNameType4Demo 封装类
首先定义参数 name 及 type ,供其他类直接调用,安全性比较高,详细代码如下所示:
2.2 定义 XMLParseDemoDataModel.java 类文件
定义 XMLParseDemoDataModel.java 类继承 AbstractDataModel 接口,实现 getColumnCount、getColumnName、getRowCount、getValueAt 四个方法,详细代码如下所示:
2.3 定义程序数据集 XMLDemoTableData
通过参数 $filename,动态显示 XML 文件内容,首先 XML 文件需要放到某个目录下,如下代码是放到/Users/susie/Downloads/,并且定义需要解析的数据列,这边定义的数据列名称,跟 XML 内字段名称是一一对用的。
详细代码如下所示:
注:如果 XML 文件的格式与问题描述处所展示的 XML 格式不一致,则需要修改类中的 deep 变量,把列名所在的节点层数改成相对应的数值。
2.4 编译程序数据源
可以在 Eclipse 或 IntelliJ IDEA 中编译上述 Java 文件,注意需要引入 FineReport 设计器下的 JAR 包,详细点击 Eclipse中启动设计器。
注:XML 的文件路径也需要根据实际情况修改,例如下载到 D 盘,即D://
分别编译 XMLColumnNameType4Demo.java、XMLParseDemoDataModel.java、XMLDemoTableData.java 三个类文件,将生成的 class 文件放置于%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\data 下。
2.5 配置程序数据源
新建程序数据集,如下图所示:
选择我们定义好的程序数据集 XMLDemoTableData.class文件,添加数据集默认参数 filename,值为 Northwind,如下图所示:
2.6 使用程序数据源
在模板数据集窗口,点击预览按钮,弹出参数对话框,输入要显示的 XML 文件名称,点击确定则可以把 Northwind.xml 文件里面的数据读取出来转换报表数据源了,如下图: