核心功能
- 为定长(位置分隔)和字符分隔格式提供双向平面文件/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 元素。