重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇文章给大家分享的是有关FineReport中怎么解析数据库内XML文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
创新互联-专业网站定制、快速模板网站建设、高性价比沧州网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式沧州网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖沧州地区。费用合理售后完善,10多年实体公司更值得信赖。在数据库表中,其中字段XML所存的为xml格式数据在表xmltest中。那么在使用该表进行报表制作时,需要将存于xml字段中的值读取出来作为报表数据源。
XML每条记录数据格式如下:
最终用于制作报表的数据源形式如下:
对于这样的情况要如何来实现呢?FineReport中可以通过自定义程序数据集来对xml字段数据进行解析,最终返回所希望的数据报表。
帆软报表FineReport的数据来源可以是任何类型的数据,因此FineReport是通过AbstractTableData抽象类,也就可以用自定义类型的程序数据集,数据来源是通过把xml格式数据转入ArrayList中。
数据集初始化方法init()
连接目标数据库后,执行sql查询语句,将xmltest表数据全部查询出来,对于ID、NAME字段的值将直接存于新的结果集ArrayList中,对于xml字段通过GetXmlDate类对其进行解析后再转入ArrayList中。
GetXmlDate类代码如下:
package com.fr.data; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.logging.Level; import com.fr.base.FRContext; import com.fr.stable.xml.XMLReadable; import com.fr.stable.xml.XMLableReader; public class GetXmlDate { // 定义返回值数组 private String[] Value = new String[3]; // 定义查询的name值 private String[] Name = null; protected String[] readerXMLSource(InputStream in, String[] name) throws Exception { Name = name; InputStreamReader reader = new InputStreamReader(in, "utf-8"); readXMLSource(reader); return Value; } protected void readXMLSource(Reader reader) throws Exception { XMLableReader xmlReader = XMLableReader.createXMLableReader(reader); if (xmlReader != null) { xmlReader.readXMLObject(new Content()); } } private class Content implements XMLReadable { public void readXML(XMLableReader reader) { if (reader.isChildNode()) { if (reader.getTagName().equals("Field")) { Field field = new Field(); reader.readXMLObject(field); // 获得name对应的value值 if (Name[0].equals(field.name)) { Value[0] = field.value; } else if (Name[1].equals(field.name)) { Value[1] = field.value; } else if (Name[2].equals(field.name)) { Value[2] = field.value; } } } } } // 定义每个field的结构 private class Field implements XMLReadable { private String name; private String type; private String value; public void readXML(XMLableReader reader) { if (reader.isChildNode()) { String tagName = reader.getTagName(); if (tagName.equals("Name")) { this.name = reader.getElementValue(); } else if (tagName.equals("Type")) { this.type = reader.getElementValue(); } else if (tagName.equals("Value")) { this.value = reader.getElementValue(); } } } } }定义程序数据集
定义类XMLRead.java,继承AbstractTableData接口,实现getColumnCount、getColumnName、getRowCount、getValueAt四个方法;
XMLRead.java类代码如下:
上述代码中的数据库连接改动自己存档xmltest表的数据库
编译程序数据源
首先编译GetXmlDate.java然后再编译XMLRead.java,将生成的class文件放于WEB-INF/classes/com/fr/data下。
配置程序数据源
新建报表,报表数据集>程序数据集,选择定义好的程序数据集XMLRead.class文件,名字可以自定义,如ds1。
使用程序数据源
制作报表保存为xmlread.cpt,如下:
BS访问报表,效果如下:
以上就是FineReport中怎么解析数据库内XML文件,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。