核心功能
- 為定長(位置分隔)和字元分隔格式提供雙向平面檔案/XML 解析
- 支援多種行型別,具備控制欄位識別功能
- 自動層級檢測,併為”主-詳”(Master-Detail)關係提供 XML 巢狀支援
- 提供完善的欄位對映,具備自定義資料型別處理功能
概觀
每個 Flat File 端口配置一個特定的平面檔案格式,從而實現與 XML 格式的互相轉換。Flat File 端口有兩個主要的模式:- Position Delimited,端口配置有任意的欄位名稱、索引(即位置)和長度,表明資料在平面檔案中每一行出現的位置。
- Character Delimited,端口配置有分隔平面檔案中欄位值的字元。
如果還需要一個數字控制欄位,請按照非標準 XML 控制欄位中的說明進行設定。
端口配置
檔案詳情索引標籤
控制欄位:位置分隔
和控制欄位有關的設定,決定了在平面檔案格式中定義的不同的行型別。控制欄位:字元分隔
和控制欄位有關的設定,決定了在平面檔案格式中定義的不同的行型別。行型別
該部分允許以平面檔案格式定義欄位名和位置。更多定義平面格式的詳情請查閱定義平面檔案格式部分。 如果檔案型別是 Position Delimited 且多行模式啟用,使用新增行型別按鈕定義。每個行型別有一個控制欄位值,來標識行型別。例如,header 行可能有值為 HEAD 的控制欄位值,item 行可能有值為 ITEM 的控制欄位值。 如果檔案型別設定為 Character Delimited,多行模式啟用,生成欄位/行型別名稱啟用,那麼為平面檔案中存在的所有欄位和行型別提供名稱和索引就不是必需的。在這種情況下,端口將會為任何未定義的欄位或行型別自動生成 XML 元素。取消生成欄位/行型別名稱以手動指定欄位名稱。設定索引標籤
配置
與端口核心配置相關的設定。高階頁面
訊息
日誌
其他設定
其他設定
自動化頁面
效能
告警索引標籤
SLA 索引標籤
定義平面檔案格式
配置 Flat File 端口的第一步就是定義平面檔案的格式。本部分介紹具有單行型別的格式,換句話說,平面檔案中的每一行都具有相同的欄位集。對於有多個不同行型別的平面檔案,請查閱多種行型別部分。Character Delimited 的單行格式
對於 Character Delimited 的平面檔案,定義格式很簡單:透過分隔符號屬性指定平面檔案中分隔不同欄位的字元。 當前列標題欄位說明了平面檔案中的第一行是否是標題行;換句話說,它包含了欄位名稱而不是實際資料。如果這些列標題存在,端口將會使用這些標題名稱作為最終轉換成的 XML 中的 XML 元素名。同樣的,端口也會使用 XML 元素名稱在從 XML 轉換為平面檔案時生成一個標題行。 如果列標題不存在,端口支援透過在行型別中新增欄位,手動指定每一個欄位的名稱。這些欄位名稱按照索引順序應用,意味著行型別中的第一個項目將會是平面檔案行中第一個欄位的名稱,以此類推。 端口也可以透過啟用使用自動生成的欄位名稱來自動生成通用的欄位名稱。Position Delimited 的單行格式
對於 Position Delimited 的平面檔案,定義格式需要指定在格式中每個欄位的位置。端口設定中行型別部分為平面檔案中存在的行增加任意數量的欄位。每個欄位必須使用名稱和其在平面檔案中出現的位置進行標識。 當前列標題欄位表明了平面檔案中的第一行是否為標題行;換句話說,它包括了欄位名稱而不是實際資料。欄位名稱仍然需要在行型別部分中配置,且這個設定簡單地保證了標題行不被識別為實際資料。非標準 XML 控制欄位
平面檔案資料可能包含完全數字或以數字開頭的控制欄位的行。雖然這在平面檔案資料中很正常,但在將該平面檔案資料轉換為 XML 時卻帶來了挑戰,因為 XML 元素不能以數字開頭。它們必須以字母或下劃線開頭。為了在平面檔案端口中適應這種情況,如果控制欄位以數字開頭, 會自動在輸出 XML 中的該值前面新增兩個下劃線 (__)。此外,還會向該元素新增一個lineType 屬性,其值對應於原始控制欄位值。例如,以下平面檔案資料包括兩種線型,控制欄位分別為 000 和 111:

lineType 屬性。這允許平面檔案資料和 XML 完全雙向,這意味著當輸出 XML 作為輸入傳遞到平面檔案端口時,輸出是包含正確線型定義且不帶任何下劃線的平面檔案資料。
這也意味著,如果要從 XML 轉到平面檔案,並且需要以數字開頭(或全部為數字)的線型控制欄位,則需要在文件到達平面檔案端口之前,在文件對映中的相應 XML 元素上實現 lineType XML 屬性。
多種行型別
如果平面檔案格式包括了多種行型別,多行模式屬性應該被啟用。平面檔案中標識行型別的欄位被稱為控制欄位。Character Delimited 的多種行型別
當檔案型別為 Character Delimited,欄位索引設定決定了控制欄位出現在平面檔案中每一行的位置。該索引從 0 開始,意味著如果控制欄位是行中的第 5 個值,那麼欄位索引就應該是 4。 對於可能出現在控制欄位的每個值,在端口設定行型別單擊新增行型別按鈕。標識行型別的值應該在該行的控制欄位值中設定。 一旦每個可能的行型別透過特定的控制欄位值被新增和標識,在每行中將出現的欄位應根據索引順序指定。 如果生成欄位/行型別名稱啟用,為在平面檔案中存在的所有欄位或行型別(只有控制欄位必需)提供名稱和索引是不必要的。在這種情況下,端口將會為任何未定義的欄位或行型別自動生成 XML 元素。Position Delimited 的多種行型別
當檔案型別是 Position Delimited,起始索引設定決定了控制欄位在平面檔案中每一行出現(開始)的位置。這個索引從 0 開始,意味著如果控制欄位從行中第 15 個字元開始,那麼起始索引就應該是 14。 對於可能出現在控制欄位的每個值,在端口設定行型別單擊新增行型別按鈕。標識行型別的值應該在該行的控制欄位值中設定。 一旦每個可能的行型別透過特定的控制欄位值被新增和標識,在每行中將出現的欄位應根據所處(開始)的位置指定。多行範例
例如,某個平面檔案包括兩種型別的行,一個 shipment 行和一個 package 行。shipment 行包括髮貨的日期、時間和地址資訊,package 行型別包括了發貨的專案資訊。每一行的第一個欄位是 “SHIP” 或 “PCKG” 來表明該行是什麼型別。 針對這種情況,多行模式應該被啟用,且欄位索引(或起始索引)應設定為 0,表明控制欄位是該行中的第一個欄位。然後,在行型別部分應該配置有兩種行型別;一種控制欄位值為 “SHIP”,包括 shipment 行的每個欄位(例如發貨日期,交付日期,收貨地址等),一種控制欄位值為 “PCKG”,包括 package 行的每個欄位(例如專案名稱,專案重量等)。XML 格式
在平面檔案轉換為 XML 檔案之後,結果應有如下的 XML 結構:- 位於檔案根部的 Items 元素
- 平面檔案中的每一行有一個與該行控制欄位值相同的元素(如果未定義控制欄位值,則是”行”)
- 行中的每個欄位是控制欄位值元素的子元素
多行層級關係
有多種行型別的平面檔案通常在行型別中有隱含的層級結構。例如,一行包括訂單的資訊(例如客戶名稱,訂單日期等),下面幾行代表訂單中的每個訂單行(例如專案名稱,專案數量等)。行專案”屬於”訂單,構成層級關係。 這些關係有時稱為”主-明細”關係;意味著第一個行型別(訂單)是主,下面幾行(行專案)是關於主行的”明細”資訊。在 XML 中,這通常表現為”父子”關係。 Flat File 端口在轉換平面檔案為 XML 時可以保留這些層級關係。如果在高階頁面啟用了巢狀行型別設定,端口將自動縮排”明細”行,使它們成為”主”行型別的子元素。 以下是將巢狀行型別設為 true,轉換一個有層級關係的平面檔案的範例。在範例之後的部分將解釋端口決定層級關係使用的邏輯。多行層級關係範例
以輸入以下平面檔案為例:M 和 D:
M,或者說是主,包括一個訂單的資訊:客戶名稱,訂單日期,以及一個”重要客戶”的標識D,或者說明細,包括了之前訂單的訂單行資訊:專案名稱,專案數量,專案價格
D 行型別”屬於” M 行型別,兩者為層級關係,那麼在轉換平面檔案為 XML 時,需要將層級關係保留下來。要檢視其格式,請在轉換上文平面檔案為 XML 時,啟用巢狀行型別,採取以下範例輸出:
D 記錄為 M 記錄的子元素,準確反映了源資料中存在的層級結構。
多行層級關係邏輯
Flat File 端口使用源平面檔案中行的順序決定行專案之間的層級關係。當巢狀行型別啟用,端口將遵循以下邏輯:- 端口遇到的第一個行型別通常被當作層級結構的最上級(即不會在生成的 XML 中縮排)
- 在第一個行型別之後,當端口遇到一個新的行,它假設這個行型別是前一個行型別的下的層級(即它歸屬於前一個行且在 XML 中縮排)
- 當端口遇到一個之前遇到過的行型別,將傳回到該行型別的層級,並關閉所有等於或低於此等級的 XML 元素。