Skip to main content
Flat File 端口可以實現平面檔案和 XML 檔案的互相轉換。

核心功能

  • 為定長(位置分隔)和字元分隔格式提供雙向平面檔案/XML 解析
  • 支援多種行型別,具備控制欄位識別功能
  • 自動層級檢測,併為”主-詳”(Master-Detail)關係提供 XML 巢狀支援
  • 提供完善的欄位對映,具備自定義資料型別處理功能

概觀

每個 Flat File 端口配置一個特定的平面檔案格式,從而實現與 XML 格式的互相轉換。Flat File 端口有兩個主要的模式:
  • Position Delimited,端口配置有任意的欄位名稱、索引(即位置)和長度,表明資料在平面檔案中每一行出現的位置。
  • Character Delimited,端口配置有分隔平面檔案中欄位值的字元。
更多詳情請查閱定義平面檔案格式部分。
如果還需要一個數字控制欄位,請按照非標準 XML 控制欄位中的說明進行設定。
Flat File 端口支援定義多種平面檔案中不同型別的行。例如,平面檔案中可能有一個 “header” 行,代表訂單的日期,有多個 “item” 行,代表訂單中的行專案。 定義多種行型別的關鍵是指定控制欄位;控制欄位值決定了在平面檔案中特定的行型別(例如,header 行可能有一個控制欄位值為 “HEAD”,item 行可能有一個控制欄位值為 “ITEM”)。更多配置多種行型別的詳情請查閱多種行型別部分。 平面檔案格式配置完後,端口會轉換與此格式匹配的檔案到 XML。最終的 XML 結構在 XML 格式部分有詳細解釋。Flat File 端口也可以將匹配這種結構的 XML 轉換為定義的平面檔案格式。 某些平面檔案在不同行有隱含的上下級關係。關於更多在轉換平面檔案為 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 屬性,其值對應於原始控制欄位值。例如,以下平面檔案資料包括兩種線型,控制欄位分別為 000111
此資料的平面檔案配置如下所示: 當使用此配置透過端口執行此平面檔案資料時,輸出如下所示:
請注意,每種線型都帶有兩個下劃線字首,並且 XML 元素具有與原始控制欄位值相對應的 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 元素
  • 平面檔案中的每一行有一個與該行控制欄位值相同的元素(如果未定義控制欄位值,則是”行”)
  • 行中的每個欄位是控制欄位值元素的子元素
例如,如果平面檔案有 “SHIP” 和 “PCKG” 行,那麼輸出的 XML 會和此格式相似:
轉換 XML 檔案為平面檔案,輸入的 XML 必須與上面的結構匹配(包括欄位名稱必須與端口配置中定義的欄位匹配的限制)。 當轉換 XML 為平面檔案時,端口將在最終的平面檔案中為每個 row 元素建立一個新行。對於 row 元素的每個子元素,端口將會將其與端口配置中欄位名稱匹配,並將該元素放到合適的欄位索引

多行層級關係

有多種行型別的平面檔案通常在行型別中有隱含的層級結構。例如,一行包括訂單的資訊(例如客戶名稱,訂單日期等),下面幾行代表訂單中的每個訂單行(例如專案名稱,專案數量等)。行專案”屬於”訂單,構成層級關係。 這些關係有時稱為”主-明細”關係;意味著第一個行型別(訂單)是主,下面幾行(行專案)是關於主行的”明細”資訊。在 XML 中,這通常表現為”父子”關係。 Flat File 端口在轉換平面檔案為 XML 時可以保留這些層級關係。如果在高階頁面啟用了巢狀行型別設定,端口將自動縮排”明細”行,使它們成為”主”行型別的子元素。 以下是將巢狀行型別設為 true,轉換一個有層級關係的平面檔案的範例。在範例之後的部分將解釋端口決定層級關係使用的邏輯。

多行層級關係範例

以輸入以下平面檔案為例:
平面檔案中有兩個行型別,MD
  • M,或者說是主,包括一個訂單的資訊:客戶名稱,訂單日期,以及一個”重要客戶”的標識
  • D,或者說明細,包括了之前訂單的訂單行資訊:專案名稱,專案數量,專案價格
因為 D 行型別”屬於” M 行型別,兩者為層級關係,那麼在轉換平面檔案為 XML 時,需要將層級關係保留下來。要檢視其格式,請在轉換上文平面檔案為 XML 時,啟用巢狀行型別,採取以下範例輸出:
可以看到 D 記錄為 M 記錄的子元素,準確反映了源資料中存在的層級結構。

多行層級關係邏輯

Flat File 端口使用源平面檔案中行的順序決定行專案之間的層級關係。當巢狀行型別啟用,端口將遵循以下邏輯:
  • 端口遇到的第一個行型別通常被當作層級結構的最上級(即不會在生成的 XML 中縮排)
  • 在第一個行型別之後,當端口遇到一個新的行,它假設這個行型別是前一個行型別的下的層級(即它歸屬於前一個行且在 XML 中縮排)
  • 當端口遇到一個之前遇到過的行型別,將傳回到該行型別的層級,並關閉所有等於或低於此等級的 XML 元素。
因此,源平面檔案必須根據所需的層級結構按行排列。

範例