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