本篇文章給大家分享的是有關(guān)FineReport中怎么解析數(shù)據(jù)庫內(nèi)XML文件,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比滄州網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式滄州網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋滄州地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。在數(shù)據(jù)庫表中,其中字段XML所存的為xml格式數(shù)據(jù)在表xmltest中。那么在使用該表進行報表制作時,需要將存于xml字段中的值讀取出來作為報表數(shù)據(jù)源。
XML每條記錄數(shù)據(jù)格式如下:
<Field><Name>MemoryFreeSize</Name><Type>int</Type><Value>1962</Value></Field>
<Field><Name>MemoryTotalSize</Name><Type>int</Type><Value>2047</Value></Field>
<Field><Name>MemoryUsage</Name><Type>int</Type><Value>4</Value></Field> ;
<Field><Name>MemoryFreeSize</Name><Type>Int</Type><Value>1999</Value></Field>
<Field><Name>MemoryTotalSize</Name><Type>Int</Type><Value>2048</Value></Field>
<Field><Name>MemoryUsage</Name><Type>Int</Type><Value>10</Value></Field>;
<Field><Name>MemoryFreeSize</Name><Type>Int</Type><Value>2000</Value></Field>
<Field><Name>MemoryTotalSize</Name><Type>Int</Type><Value>2050</Value></Field>
<Field><Name>MemoryUsage</Name><Type>Int</Type><Value>15</Value></Field>
最終用于制作報表的數(shù)據(jù)源形式如下:
對于這樣的情況要如何來實現(xiàn)呢?FineReport中可以通過自定義程序數(shù)據(jù)集來對xml字段數(shù)據(jù)進行解析,最終返回所希望的數(shù)據(jù)報表。
帆軟報表FineReport的數(shù)據(jù)來源可以是任何類型的數(shù)據(jù),因此FineReport是通過AbstractTableData抽象類,也就可以用自定義類型的程序數(shù)據(jù)集,數(shù)據(jù)來源是通過把xml格式數(shù)據(jù)轉(zhuǎn)入ArrayList中。
數(shù)據(jù)集初始化方法init()
連接目標(biāo)數(shù)據(jù)庫后,執(zhí)行sql查詢語句,將xmltest表數(shù)據(jù)全部查詢出來,對于ID、NAME字段的值將直接存于新的結(jié)果集ArrayList中,對于xml字段通過GetXmlDate類對其進行解析后再轉(zhuǎn)入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 { // 定義返回值數(shù)組 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對應(yīng)的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的結(jié)構(gòu) 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(); } } } } }定義程序數(shù)據(jù)集
定義類XMLRead.java,繼承AbstractTableData接口,實現(xiàn)getColumnCount、getColumnName、getRowCount、getValueAt四個方法;
XMLRead.java類代碼如下:
上述代碼中的數(shù)據(jù)庫連接改動自己存檔xmltest表的數(shù)據(jù)庫
編譯程序數(shù)據(jù)源
首先編譯GetXmlDate.java然后再編譯XMLRead.java,將生成的class文件放于WEB-INF/classes/com/fr/data下。
配置程序數(shù)據(jù)源
新建報表,報表數(shù)據(jù)集>程序數(shù)據(jù)集,選擇定義好的程序數(shù)據(jù)集XMLRead.class文件,名字可以自定義,如ds1。
使用程序數(shù)據(jù)源
制作報表保存為xmlread.cpt,如下:
BS訪問報表,效果如下:
以上就是FineReport中怎么解析數(shù)據(jù)庫內(nèi)XML文件,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
本文題目:FineReport中怎么解析數(shù)據(jù)庫內(nèi)XML文件-創(chuàng)新互聯(lián)
新聞來源:http://jinyejixie.com/article32/coispc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、App開發(fā)、軟件開發(fā)、云服務(wù)器、定制開發(fā)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容