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 包,详细点击 编译Java程序
注: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 文件里面的数据读取出来转换报表数据源了,如下图: