一種基于xml技術(shù)的通用報(bào)表生成方法及系統(tǒng)的制作方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種網(wǎng)絡(luò)管理系統(tǒng)中基于XML技術(shù)的通用報(bào)表生成方法及系統(tǒng),涉及網(wǎng)絡(luò)管理【技術(shù)領(lǐng)域】。該方法包括以下步驟:約定通用的報(bào)表數(shù)據(jù)接口,通過(guò)報(bào)表數(shù)據(jù)接口導(dǎo)出原始數(shù)據(jù);初始化報(bào)表數(shù)據(jù)接口,獲取配置數(shù)據(jù);按先行后列的順序遍歷所有的原始數(shù)據(jù),生成XML數(shù)據(jù);判斷是否需要裝載用戶自定義XSL模板,若是,解析用戶自定義XSL模板文件,生成XSL數(shù)據(jù),否則解析原始數(shù)據(jù)的表頭部分和數(shù)據(jù)部分,生成XSL數(shù)據(jù);將XML數(shù)據(jù)通過(guò)生成的XSL數(shù)據(jù)轉(zhuǎn)換成報(bào)表文件。本發(fā)明能夠支持自定義的報(bào)表樣式,不僅比較靈活,便于用戶使用,而且當(dāng)導(dǎo)出的報(bào)表格式發(fā)生變化時(shí),修改或者增加X(jué)SL數(shù)據(jù)即可適應(yīng),操作過(guò)程比較簡(jiǎn)單,便于維護(hù)。
【專(zhuān)利說(shuō)明】一種基于XML技術(shù)的通用報(bào)表生成方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)管理【技術(shù)領(lǐng)域】,具體涉及網(wǎng)絡(luò)管理系統(tǒng)中基于XML技術(shù)的通用報(bào) 表生成方法及系統(tǒng)。
【背景技術(shù)】
[0002] 隨著通信技術(shù)的發(fā)展,業(yè)務(wù)數(shù)據(jù)種類(lèi)越來(lái)越豐富,用戶經(jīng)常需要將各種業(yè)務(wù)數(shù) 據(jù)導(dǎo)出為不同格式的報(bào)表,例如CSV(Comma Separated Values,逗號(hào)分隔值文件格式)、 HTML (Hyper Text Markup language,超級(jí)文本標(biāo)記語(yǔ)言)和EXCEL (電子表格);報(bào)表功能 已經(jīng)成為網(wǎng)絡(luò)管理軟件不可或缺主要功能之一。
[0003] 現(xiàn)有的網(wǎng)絡(luò)管理軟件生成報(bào)表的方法一般為以下2種:
[0004] (1)針對(duì)每一種數(shù)據(jù)類(lèi)型編寫(xiě)個(gè)對(duì)應(yīng)報(bào)表格式的模板,模板中包含用于替換數(shù)據(jù) 的符號(hào);編寫(xiě)轉(zhuǎn)換函數(shù),將模板中的符號(hào)通過(guò)轉(zhuǎn)換函數(shù)替換為實(shí)際數(shù)據(jù)。
[0005] (2)將數(shù)據(jù)填入某種帶有報(bào)表功能的控件,利用該控件自帶的報(bào)表導(dǎo)出功能導(dǎo)出 報(bào)表。
[0006] 但是,上述2種方法生成報(bào)表時(shí),分別存在以下缺陷:
[0007] 1、通過(guò)方法(1)生成報(bào)表時(shí),當(dāng)導(dǎo)出的報(bào)表格式發(fā)生變化時(shí),需要修改模板文檔 和代碼,操作過(guò)程比較復(fù)雜,維護(hù)性較差。
[0008] 2、通過(guò)方法(2)生成報(bào)表時(shí),必需依賴(lài)帶有報(bào)表功能的控件,無(wú)法通用和擴(kuò)展,其 適用范圍比較單一。
[0009] 3、方法(1)針對(duì)數(shù)據(jù)類(lèi)型編寫(xiě)特定的模板,方法(2)帶有報(bào)表功能的控件導(dǎo)出報(bào) 表的格式固定,方法(1)和方法(2)導(dǎo)出報(bào)表的內(nèi)容和格式均固定化,不便于用戶使用。
【發(fā)明內(nèi)容】
[0010] 針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種基于XML技術(shù)的通用報(bào) 表生成方法及系統(tǒng),能夠支持自定義的報(bào)表樣式,不僅比較靈活,便于用戶使用,而且當(dāng)導(dǎo) 出的報(bào)表格式發(fā)生變化時(shí),只需修改或者增加 XSL數(shù)據(jù)即可適應(yīng),操作過(guò)程比較簡(jiǎn)單,便于 維護(hù)。
[0011] 為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:一種基于XML技術(shù)的通用報(bào)表生成 方法,包括以下步驟:
[0012] A、約定通用的報(bào)表數(shù)據(jù)接口,通過(guò)報(bào)表數(shù)據(jù)接口導(dǎo)出原始數(shù)據(jù),所有原始數(shù)據(jù)包 括表頭部分和數(shù)據(jù)部分,表頭部分和數(shù)據(jù)部分均包括每一行的數(shù)據(jù)和每一列的數(shù)據(jù);初始 化報(bào)表數(shù)據(jù)接口,獲取配置數(shù)據(jù);
[0013] B、遍歷所有的原始數(shù)據(jù),生成XML數(shù)據(jù);判斷是否需要裝載用戶自定義XSL模板, 若是,轉(zhuǎn)到步驟C,否則轉(zhuǎn)到步驟D ;
[0014] C、解析用戶自定義XSL模板文件,生成XSL數(shù)據(jù),轉(zhuǎn)到步驟E ;
[0015] D、解析原始數(shù)據(jù)的表頭部分和數(shù)據(jù)部分,生成XSL數(shù)據(jù),轉(zhuǎn)到步驟E ;
[0016] E、將XML數(shù)據(jù)通過(guò)XSL數(shù)據(jù)轉(zhuǎn)換成報(bào)表文件。
[0017] 在上述技術(shù)方案的基礎(chǔ)上,步驟A中所述配置數(shù)據(jù)包括用戶自定義模板和數(shù)據(jù)條 目。
[0018] 在上述技術(shù)方案的基礎(chǔ)上,步驟B中所述遍歷所有的原始數(shù)據(jù)的順序?yàn)橄刃泻?列。
[0019] 在上述技術(shù)方案的基礎(chǔ)上,步驟C中所述解析用戶自定義XSL模板文件包括以下 步驟:獲取當(dāng)前模板文件對(duì)應(yīng)導(dǎo)出的報(bào)表格式類(lèi)型、以及當(dāng)前模板能夠使用的數(shù)據(jù)類(lèi)型,根 據(jù)當(dāng)前模板文件的報(bào)表格式類(lèi)型和數(shù)據(jù)生成XSL數(shù)據(jù)。
[0020] 在上述技術(shù)方案的基礎(chǔ)上,步驟D中所述解析原始數(shù)據(jù)的表頭部分和數(shù)據(jù)部分, 生成XSL數(shù)據(jù)包括以下步驟:
[0021] D1、遍歷原始數(shù)據(jù)表頭部分的每一列數(shù)據(jù)、并寫(xiě)入XSL文件;
[0022] D2、判斷是否需要生成CSV格式的報(bào)表,若是,直接根據(jù)原始數(shù)據(jù)的數(shù)據(jù)部分生成 XSL數(shù)據(jù),轉(zhuǎn)到步驟E,否則根據(jù)原始數(shù)據(jù)的數(shù)據(jù)部分,形成若干矩形區(qū)域,轉(zhuǎn)到步驟D4 ;
[0023] D4、選取一個(gè)最小的矩形區(qū)域;
[0024] D5、掃描當(dāng)前矩形區(qū)域,選取當(dāng)前矩形區(qū)域中未掃描的一行數(shù)據(jù);遍歷當(dāng)前行數(shù)據(jù) 的所有列,判斷當(dāng)前行所有列是否有合并,若是,針對(duì)不同的報(bào)表格式,在XSL文件中寫(xiě)入 不同的單元格合并信息,否則通過(guò)XSL語(yǔ)法取到與當(dāng)前行所有列的數(shù)據(jù)對(duì)應(yīng)的報(bào)表數(shù)據(jù)、 并寫(xiě)入XSL文件;將合并的行起始值、列起始值和數(shù)目記錄在合并信息表中、并標(biāo)記為已掃 描;
[0025] D6、重復(fù)執(zhí)行步驟D5,直至當(dāng)前矩形區(qū)域中的所有數(shù)據(jù)遍歷完成;
[0026] D7、重復(fù)執(zhí)行步驟D4?D6,直至所有原始數(shù)據(jù)遍歷完成,生成所有原始數(shù)據(jù)的XSL 數(shù)據(jù),轉(zhuǎn)到步驟E。
[0027] 在上述技術(shù)方案的基礎(chǔ)上,步驟D2中每個(gè)矩形區(qū)域中第一行的單元與上個(gè)矩形 區(qū)域倒數(shù)第一行的單元未合并,倒數(shù)第一行的單元和下個(gè)矩形區(qū)域第一行的單元未合并; 矩形塊的第一行和最后一行之間可以有任意行、列合并。
[0028] 在上述技術(shù)方案的基礎(chǔ)上,步驟E中所述將XML數(shù)據(jù)通過(guò)XSL數(shù)據(jù)轉(zhuǎn)換成報(bào)表文 件包括以下步驟:通過(guò)MSXML3. 0中的transformNodeToObject函數(shù),將XML數(shù)據(jù)通過(guò)XSL 數(shù)據(jù)轉(zhuǎn)換成報(bào)表文件。
[0029] 在上述技術(shù)方案的基礎(chǔ)上,步驟E之后還包括以下步驟:向報(bào)表文件中添加額外 信息,所述額外信息包括統(tǒng)計(jì)某列數(shù)據(jù)信息和報(bào)表生成時(shí)間。
[0030] 一種上述方法的基于XML技術(shù)的通用報(bào)表生成系統(tǒng),包括原始數(shù)據(jù)導(dǎo)出模塊、XML 數(shù)據(jù)生成模塊、用戶XSL數(shù)據(jù)生成模塊、原始XSL數(shù)據(jù)生成模塊和報(bào)表轉(zhuǎn)換模塊
[0031] 所述原始數(shù)據(jù)導(dǎo)出模塊用于:約定通用的報(bào)表數(shù)據(jù)接口,通過(guò)報(bào)表數(shù)據(jù)接口導(dǎo)出 原始數(shù)據(jù),所有原始數(shù)據(jù)包括表頭部分和數(shù)據(jù)部分,表頭部分和數(shù)據(jù)部分均包括每一行的 數(shù)據(jù)和每一列的數(shù)據(jù);初始化報(bào)表數(shù)據(jù)接口,獲取配置數(shù)據(jù),向XML數(shù)據(jù)生成模塊發(fā)送XML 數(shù)據(jù)生成信號(hào);
[0032] 所述XML數(shù)據(jù)生成模塊用于:收到XML數(shù)據(jù)生成信號(hào)后,按先行后列的順序遍歷所 有的原始數(shù)據(jù),生成XML數(shù)據(jù);判斷是否需要裝載用戶自定義XSL模板,若是,向用戶XSL數(shù) 據(jù)生成模塊發(fā)送XSL數(shù)據(jù)生成信號(hào),否則向原始XSL數(shù)據(jù)生成模塊發(fā)送XSL數(shù)據(jù)生成信號(hào);
[0033] 所述用戶XSL數(shù)據(jù)生成模塊用于:收到XSL數(shù)據(jù)生成信號(hào)后,解析用戶自定義XSL 模板文件,生成XSL數(shù)據(jù),向報(bào)表轉(zhuǎn)換模塊發(fā)送報(bào)表轉(zhuǎn)換信號(hào);
[0034] 所述原始XSL數(shù)據(jù)生成模塊用于:收到XSL數(shù)據(jù)生成信號(hào)后,解析原始數(shù)據(jù)的表頭 部分和數(shù)據(jù)部分,生成XSL數(shù)據(jù),向報(bào)表轉(zhuǎn)換模塊發(fā)送報(bào)表轉(zhuǎn)換信號(hào);
[0035] 所述報(bào)表轉(zhuǎn)換模塊用于:收到報(bào)表轉(zhuǎn)換信號(hào)后,將XML數(shù)據(jù)通過(guò)XSL數(shù)據(jù)轉(zhuǎn)換成報(bào) 表文件。
[0036] 與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
[0037] (1)本發(fā)明從內(nèi)部生成XML數(shù)據(jù)和XSL數(shù)據(jù),XML數(shù)據(jù)通過(guò)XSL數(shù)據(jù)轉(zhuǎn)換成報(bào)表文 件。與現(xiàn)有技術(shù)中直接生成報(bào)表文件相比,本發(fā)明的XLS數(shù)據(jù)能夠被用戶修改后作為模板 導(dǎo)入;與現(xiàn)有技術(shù)中內(nèi)容和格式均固定化的報(bào)表相比,本發(fā)明能夠支持自定義的報(bào)表樣式, 不僅比較靈活,便于用戶使用,而且當(dāng)導(dǎo)出的報(bào)表格式發(fā)生變化時(shí),只需修改或者增加 XSL 數(shù)據(jù)即可適應(yīng),操作過(guò)程比較簡(jiǎn)單,便于維護(hù)。
[0038] (2)本發(fā)明的報(bào)表數(shù)據(jù)接口能夠?qū)⒕唧w的算法和數(shù)據(jù)分開(kāi),進(jìn)而導(dǎo)出不同數(shù)據(jù)類(lèi) 型的報(bào)表,不僅適用范圍比較廣泛,而且數(shù)據(jù)類(lèi)型類(lèi)型不同的報(bào)表風(fēng)格一致,便于用戶使接 受和使用。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0039] 圖1為本發(fā)明實(shí)施例中基于XML技術(shù)的通用報(bào)表生成方法的流程圖。
【具體實(shí)施方式】
[0040] 以下結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。
[0041] 本發(fā)明實(shí)施例中基于XML(可擴(kuò)展標(biāo)記語(yǔ)言)技術(shù)的通用報(bào)表生成方法,基于以下 報(bào)表格式得出:包括以下步驟:
[0042]目前需要導(dǎo)出的報(bào)表數(shù)據(jù)都是二維的,報(bào)表數(shù)據(jù)的表頭表示列,每一行均有針對(duì) 每一列的數(shù)據(jù)。報(bào)表數(shù)據(jù)中的每一個(gè)單元格可以包含一些合并信息,單元格可以有行合并, 也可以有列合并,單元格合并之后一般呈矩形。
[0043] 參見(jiàn)圖1所示,本發(fā)明實(shí)施例中基于XML技術(shù)的通用報(bào)表生成方法,包括以下步 驟:
[0044] S1 :約定通用的報(bào)表數(shù)據(jù)接口,通過(guò)報(bào)表數(shù)據(jù)接口導(dǎo)出原始數(shù)據(jù),所有原始數(shù)據(jù)包 括表頭部分和數(shù)據(jù)部分,表頭部分和數(shù)據(jù)部分均包括每一行的數(shù)據(jù)和每一列的數(shù)據(jù)。
[0045] S2 :初始化報(bào)表數(shù)據(jù)接口,獲取配置數(shù)據(jù),配置數(shù)據(jù)包括用戶自定義模板、數(shù)據(jù)條 目等。
[0046] S3 :按先行后列的順序遍歷所有的原始數(shù)據(jù),生成XML數(shù)據(jù),判斷是否需要裝載用 戶自定義XSL (可擴(kuò)展樣式表語(yǔ)言)模板,若是,轉(zhuǎn)到步驟S4,否則轉(zhuǎn)到步驟S5。
[0047] S4 :解析用戶自定義XSL模板文件,生成XSL數(shù)據(jù),轉(zhuǎn)到步驟S7。
[0048] 解析用戶自定義XSL模板文件時(shí),獲取當(dāng)前模板文件對(duì)應(yīng)導(dǎo)出的報(bào)表格式類(lèi)型、 以及當(dāng)前模板能夠使用的數(shù)據(jù)類(lèi)型,根據(jù)當(dāng)前模板文件的報(bào)表格式類(lèi)型和數(shù)據(jù)生成XSL數(shù) 據(jù)。
[0049] S5 :解析原始數(shù)據(jù)的表頭部分和數(shù)據(jù)部分,生成XSL數(shù)據(jù),轉(zhuǎn)到步驟S7。
[0050] S6 :將XML數(shù)據(jù)通過(guò)XSL數(shù)據(jù)轉(zhuǎn)換成報(bào)表文件,向報(bào)表文件中添加額外信息,額外 信息包括統(tǒng)計(jì)某列數(shù)據(jù)信息和報(bào)表生成時(shí)間等。
[0051] 將XML數(shù)據(jù)通過(guò)XSL數(shù)據(jù)轉(zhuǎn)換成報(bào)表文件時(shí),可以通過(guò)MSXML3. 0(Microsoft XML Core Services,微軟發(fā)布的xml語(yǔ)言分析器)中的transformNodeToObject函數(shù)實(shí)現(xiàn)。
[0052] 本發(fā)明實(shí)施例中的步驟S5中解析原始數(shù)據(jù)的表頭部分和數(shù)據(jù)部分,生成XSL數(shù)據(jù) 時(shí),包括以下步驟:
[0053] S501 :遍歷原始數(shù)據(jù)表頭部分的每一列數(shù)據(jù)、并寫(xiě)入XSL文件。
[0054] S502 :判斷是否需要生成CSV (Comma Separated Values,逗號(hào)分隔值文件格式) 格式的報(bào)表,若是,直接根據(jù)原始數(shù)據(jù)的數(shù)據(jù)部分生成XSL數(shù)據(jù),轉(zhuǎn)到步驟S6,否則轉(zhuǎn)到步 驟 S503。
[0055] S503 :根據(jù)原始數(shù)據(jù)的數(shù)據(jù)部分,形成若干矩形區(qū)域,轉(zhuǎn)到步驟S504。
[0056] 矩形區(qū)域中第一行的單元與上個(gè)矩形區(qū)域倒數(shù)第一行的單元未合并,倒數(shù)第一行 的單元和下個(gè)矩形區(qū)域第一行的單元未合并;矩形塊的第一行和最后一行之間可以有任意 行、列合并。
[0057] S504 :選取一個(gè)最小的矩形區(qū)域。
[0058] S505 :掃描當(dāng)前矩形區(qū)域,選取當(dāng)前矩形區(qū)域中未掃描的一行數(shù)據(jù);遍歷當(dāng)前行 數(shù)據(jù)的所有列,判斷當(dāng)前行所有列是否有合并,若是,針對(duì)不同的報(bào)表格式,在XSL文件中 寫(xiě)入不同的單元格合并信息(例如HTML的<td>用rowspan、colspan屬性記錄合并,EXCEL 的〈Cell〉用ss: :MergeAcross、ss:MergeDown屬性記錄合并信息),否則通過(guò)XSL語(yǔ)法取 到與當(dāng)前行所有列的數(shù)據(jù)對(duì)應(yīng)的報(bào)表數(shù)據(jù)、并寫(xiě)入XSL文件。將合并的行起始值、列起始值 和數(shù)目記錄在一個(gè)合并信息表中,在下次掃描時(shí)跳過(guò)這些合并的單元。
[0059] S506 :重復(fù)執(zhí)行步驟S505,直至當(dāng)前矩形區(qū)域中的所有數(shù)據(jù)遍歷完成。
[0060] S507 :重復(fù)執(zhí)行步驟D4?D6,直至所有原始數(shù)據(jù)遍歷完成,生成所有原始數(shù)據(jù)的 XSL數(shù)據(jù),轉(zhuǎn)到步驟S6。
[0061] 本發(fā)明實(shí)施例中解析原始數(shù)據(jù)的表頭部分和數(shù)據(jù)部分時(shí),可以按照以下方式進(jìn)行 優(yōu)化:
[0062] 解析原始數(shù)據(jù)的表頭部分時(shí),由于大多數(shù)報(bào)表頭部分實(shí)際只有一行,沒(méi)有列合并, 因此解析表頭部分的算法能夠根據(jù)實(shí)際情況進(jìn)一步優(yōu)化。
[0063] 解析原始數(shù)據(jù)的數(shù)據(jù)部分時(shí),當(dāng)矩形區(qū)域有合并時(shí),最多能夠得到整塊矩形區(qū)域, 當(dāng)矩形區(qū)域沒(méi)有合并時(shí),最少能夠得到矩形區(qū)域中的一行數(shù)據(jù)。因此解析原始數(shù)據(jù)的數(shù)據(jù) 部分時(shí),能夠?qū)υ紙?bào)表的數(shù)據(jù)部分進(jìn)行全局優(yōu)化,例如若發(fā)現(xiàn)原始報(bào)表的數(shù)據(jù)部分是規(guī) 則的(按照某種規(guī)律重復(fù)前N行),能夠只解析前N行的數(shù)據(jù)、并利用XSL語(yǔ)法生成全部數(shù) 據(jù)。
[0064] 本發(fā)明實(shí)施例中實(shí)現(xiàn)上述方法的基于XML技術(shù)的通用報(bào)表生成系統(tǒng),包括原始數(shù) 據(jù)導(dǎo)出模塊、XML數(shù)據(jù)生成模塊、用戶XSL數(shù)據(jù)生成模塊、原始XSL數(shù)據(jù)生成模塊和報(bào)表轉(zhuǎn) 換模塊。
[0065] 原始數(shù)據(jù)導(dǎo)出模塊用于:約定通用的報(bào)表數(shù)據(jù)接口,通過(guò)報(bào)表數(shù)據(jù)接口導(dǎo)出原始 數(shù)據(jù),所有原始數(shù)據(jù)包括表頭部分和數(shù)據(jù)部分,表頭部分和數(shù)據(jù)部分均包括每一行的數(shù)據(jù) 和每一列的數(shù)據(jù);初始化報(bào)表數(shù)據(jù)接口,獲取配置數(shù)據(jù),向XML數(shù)據(jù)生成模塊發(fā)送XML數(shù)據(jù) 生成信號(hào)。
[0066] XML數(shù)據(jù)生成模塊用于:收到XML數(shù)據(jù)生成信號(hào)后,按先行后列的順序遍歷所有的 原始數(shù)據(jù),生成XML數(shù)據(jù);判斷是否需要裝載用戶自定義XSL模板,若是,向用戶XSL數(shù)據(jù)生 成模塊發(fā)送XSL數(shù)據(jù)生成信號(hào),否則向原始XSL數(shù)據(jù)生成模塊發(fā)送XSL數(shù)據(jù)生成信號(hào)。 [0067] 用戶XSL數(shù)據(jù)生成模塊用于:收到XSL數(shù)據(jù)生成信號(hào)后,解析用戶自定義XSL模板 文件,生成XSL數(shù)據(jù),向報(bào)表轉(zhuǎn)換模塊發(fā)送報(bào)表轉(zhuǎn)換信號(hào)。
[0068] 原始XSL數(shù)據(jù)生成模塊用于:收到XSL數(shù)據(jù)生成信號(hào)后,解析原始數(shù)據(jù)的表頭部分 和數(shù)據(jù)部分,生成XSL數(shù)據(jù),向報(bào)表轉(zhuǎn)換模塊發(fā)送報(bào)表轉(zhuǎn)換信號(hào)。
[0069] 報(bào)表轉(zhuǎn)換模塊用于:收到報(bào)表轉(zhuǎn)換信號(hào)后,將XML數(shù)據(jù)通過(guò)XSL數(shù)據(jù)轉(zhuǎn)換成報(bào)表文 件。
[0070] 本發(fā)明不局限于上述實(shí)施方式,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來(lái)說(shuō),在不脫離 本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也視為本發(fā)明的保護(hù) 范圍之內(nèi)。本說(shuō)明書(shū)中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。
【權(quán)利要求】
1. 一種基于XML技術(shù)的通用報(bào)表生成方法,其特征在于,包括以下步驟: A、 約定通用的報(bào)表數(shù)據(jù)接口,通過(guò)報(bào)表數(shù)據(jù)接口導(dǎo)出原始數(shù)據(jù),所有原始數(shù)據(jù)包括表 頭部分和數(shù)據(jù)部分,表頭部分和數(shù)據(jù)部分均包括每一行的數(shù)據(jù)和每一列的數(shù)據(jù);初始化報(bào) 表數(shù)據(jù)接口,獲取配置數(shù)據(jù); B、 遍歷所有的原始數(shù)據(jù),生成XML數(shù)據(jù);判斷是否需要裝載用戶自定義XSL模板,若是, 轉(zhuǎn)到步驟C,否則轉(zhuǎn)到步驟D; C、 解析用戶自定義XSL模板文件,生成XSL數(shù)據(jù),轉(zhuǎn)到步驟E ; D、 解析原始數(shù)據(jù)的表頭部分和數(shù)據(jù)部分,生成XSL數(shù)據(jù),轉(zhuǎn)到步驟E ; E、 將XML數(shù)據(jù)通過(guò)XSL數(shù)據(jù)轉(zhuǎn)換成報(bào)表文件。
2. 如權(quán)利要求1所述的基于XML技術(shù)的通用報(bào)表生成方法,其特征在于:步驟A中所 述配置數(shù)據(jù)包括用戶自定義模板和數(shù)據(jù)條目。
3. 如權(quán)利要求1所述的基于XML技術(shù)的通用報(bào)表生成方法,其特征在于:步驟B中所 述遍歷所有的原始數(shù)據(jù)的順序?yàn)橄刃泻罅小?br>
4. 如權(quán)利要求1所述的基于XML技術(shù)的通用報(bào)表生成方法,其特征在于:步驟C中所 述解析用戶自定義XSL模板文件包括以下步驟:獲取當(dāng)前模板文件對(duì)應(yīng)導(dǎo)出的報(bào)表格式類(lèi) 型、以及當(dāng)前模板能夠使用的數(shù)據(jù)類(lèi)型,根據(jù)當(dāng)前模板文件的報(bào)表格式類(lèi)型和數(shù)據(jù)生成XSL 數(shù)據(jù)。
5. 如權(quán)利要求1所述的基于XML技術(shù)的通用報(bào)表生成方法,其特征在于:步驟D中所 述解析原始數(shù)據(jù)的表頭部分和數(shù)據(jù)部分,生成XSL數(shù)據(jù)包括以下步驟: D1、遍歷原始數(shù)據(jù)表頭部分的每一列數(shù)據(jù)、并寫(xiě)入XSL文件; D2、判斷是否需要生成CSV格式的報(bào)表,若是,直接根據(jù)原始數(shù)據(jù)的數(shù)據(jù)部分生成XSL 數(shù)據(jù),轉(zhuǎn)到步驟E,否則根據(jù)原始數(shù)據(jù)的數(shù)據(jù)部分,形成若干矩形區(qū)域,轉(zhuǎn)到步驟D4 ; D4、選取一個(gè)最小的矩形區(qū)域; D5、掃描當(dāng)前矩形區(qū)域,選取當(dāng)前矩形區(qū)域中未掃描的一行數(shù)據(jù);遍歷當(dāng)前行數(shù)據(jù)的所 有列,判斷當(dāng)前行所有列是否有合并,若是,針對(duì)不同的報(bào)表格式,在XSL文件中寫(xiě)入不同 的單元格合并信息,否則通過(guò)XSL語(yǔ)法取到與當(dāng)前行所有列的數(shù)據(jù)對(duì)應(yīng)的報(bào)表數(shù)據(jù)、并寫(xiě) 入XSL文件;將合并的行起始值、列起始值和數(shù)目記錄在合并信息表中、并標(biāo)記為已掃描; D6、重復(fù)執(zhí)行步驟D5,直至當(dāng)前矩形區(qū)域中的所有數(shù)據(jù)遍歷完成; D7、重復(fù)執(zhí)行步驟D4?D6,直至所有原始數(shù)據(jù)遍歷完成,生成所有原始數(shù)據(jù)的XSL數(shù) 據(jù),轉(zhuǎn)到步驟E。
6. 如權(quán)利要求5所述的基于XML技術(shù)的通用報(bào)表生成方法,其特征在于:步驟D2中每 個(gè)矩形區(qū)域中第一行的單元與上個(gè)矩形區(qū)域倒數(shù)第一行的單元未合并,倒數(shù)第一行的單元 和下個(gè)矩形區(qū)域第一行的單元未合并;矩形塊的第一行和最后一行之間可以有任意行、列 合并。
7. 如權(quán)利要求1至6任一項(xiàng)所述的基于XML技術(shù)的通用報(bào)表生成方法,其特征在于: 步驟E中所述將XML數(shù)據(jù)通過(guò)XSL數(shù)據(jù)轉(zhuǎn)換成報(bào)表文件包括以下步驟:通過(guò)MSXML3. 0中的 transformNodeToOb ject函數(shù),將XML數(shù)據(jù)通過(guò)XSL數(shù)據(jù)轉(zhuǎn)換成報(bào)表文件。
8. 如權(quán)利要求1至6任一項(xiàng)所述的基于XML技術(shù)的通用報(bào)表生成方法,其特征在于: 步驟E之后還包括以下步驟:向報(bào)表文件中添加額外信息,所述額外信息包括統(tǒng)計(jì)某列數(shù) 據(jù)信息和報(bào)表生成時(shí)間。
9. 一種實(shí)現(xiàn)權(quán)利要求1至8任一項(xiàng)所述方法的基于XML技術(shù)的通用報(bào)表生成系統(tǒng),其 特征在于:包括原始數(shù)據(jù)導(dǎo)出模塊、XML數(shù)據(jù)生成模塊、用戶XSL數(shù)據(jù)生成模塊、原始XSL數(shù) 據(jù)生成模塊和報(bào)表轉(zhuǎn)換模塊; 所述原始數(shù)據(jù)導(dǎo)出模塊用于:約定通用的報(bào)表數(shù)據(jù)接口,通過(guò)報(bào)表數(shù)據(jù)接口導(dǎo)出原始 數(shù)據(jù),所有原始數(shù)據(jù)包括表頭部分和數(shù)據(jù)部分,表頭部分和數(shù)據(jù)部分均包括每一行的數(shù)據(jù) 和每一列的數(shù)據(jù);初始化報(bào)表數(shù)據(jù)接口,獲取配置數(shù)據(jù),向XML數(shù)據(jù)生成模塊發(fā)送XML數(shù)據(jù) 生成信號(hào); 所述XML數(shù)據(jù)生成模塊用于:收到XML數(shù)據(jù)生成信號(hào)后,按先行后列的順序遍歷所有的 原始數(shù)據(jù),生成XML數(shù)據(jù);判斷是否需要裝載用戶自定義XSL模板,若是,向用戶XSL數(shù)據(jù)生 成模塊發(fā)送XSL數(shù)據(jù)生成信號(hào),否則向原始XSL數(shù)據(jù)生成模塊發(fā)送XSL數(shù)據(jù)生成信號(hào); 所述用戶XSL數(shù)據(jù)生成模塊用于:收到XSL數(shù)據(jù)生成信號(hào)后,解析用戶自定義XSL模板 文件,生成XSL數(shù)據(jù),向報(bào)表轉(zhuǎn)換模塊發(fā)送報(bào)表轉(zhuǎn)換信號(hào); 所述原始XSL數(shù)據(jù)生成模塊用于:收到XSL數(shù)據(jù)生成信號(hào)后,解析原始數(shù)據(jù)的表頭部分 和數(shù)據(jù)部分,生成XSL數(shù)據(jù),向報(bào)表轉(zhuǎn)換模塊發(fā)送報(bào)表轉(zhuǎn)換信號(hào); 所述報(bào)表轉(zhuǎn)換模塊用于:收到報(bào)表轉(zhuǎn)換信號(hào)后,將XML數(shù)據(jù)通過(guò)XSL數(shù)據(jù)轉(zhuǎn)換成報(bào)表文 件。
【文檔編號(hào)】G06F17/21GK104216952SQ201410411380
【公開(kāi)日】2014年12月17日 申請(qǐng)日期:2014年8月20日 優(yōu)先權(quán)日:2014年8月20日
【發(fā)明者】劉代雄 申請(qǐng)人:烽火通信科技股份有限公司