节点函数简化了对分层数据结构的映射

MapForce 的节点功能简化了对分层数据的映射,例如 XML 节点或 CSV、JSON、EDI 数据,以及数据库字段。它允许用户在节点级别定义一个数据处理函数,并将该函数递归地应用于所有子项。

同样地,也可以为节点设置默认值,并且这些默认值会自动应用于其子节点。

默认设置和节点函数在以下情况下特别有用:当一个数据映射和转换任务需要对结构中的多个子项应用相同的处理逻辑时,例如:

  • 将所有子项中的空值替换为其他指定的值,该操作需要递归进行
  • 将特定值(例如“N/A”)递归地替换为其他值,应用于所有子项
  • 从数据库表中读取数据时,将所有数据库中的空值替换为其他值
  • 移除所有值在源数据库中末尾多余的空格
  • 为写入目标文件或数据库的所有值,添加自定义的前缀或后缀
  • 输出值的格式设置
  • 还有许多其他情况

默认设置和节点函数简化了分层数据的映射过程,因为它消除了在映射中重复复制粘贴相同函数的需求。 不必要地重复使用相同的函数会使映射布局变得混乱,从而更难以理解或修改。

我们来看一个例子。

以下是从 XML 转换到 CSV 的映射示例,取自 MapForce 示例项目中的 "OrderinUSD.mfd" 文件。该示例展示了节点函数的高效性和灵活性。

这个例子展示了如何将源 XML 文件中的订单数据转换成 CSV 文本格式。此外,还需要进行以下转换:源文件中“Price”元素中的价格(以欧元为单位)需要转换为美元,并且每个订单项的名称需要全部转换为大写字母。

一个节点函数既能满足需求,其功能符号会显示在“文章”节点右侧。双击该功能符号,会打开位于映射区域上方的节点功能定义对话框:

这个单节点函数将两个 MapForce 操作结合起来,以同时执行所需的货币和字符串转换。可以通过点击左侧的图标,为节点函数添加更多行,用于设置默认值或添加函数。

每一行中的第一个字段定义了该行是否适用于单个子节点,或者适用于父节点的全部子节点。

第二个字段定义了要修改的数据类型。点击“...”按钮会打开一个对话框,如上图所示,用于选择数据类型

我们的示例只包含两类数据类型的行,但实际上,可以定义一个节点函数,使其包含所有可能的数据类型。对于父节点的每个子节点,将执行与该子节点对应的数据类型的行。

第三个字段用于指定该行是否使用函数或默认值。无论哪种情况,点击“编辑”按钮都会打开该行,以便进行定义

定义一个节点函数的过程,可以通过从“函数库”窗口拖动函数,以及/或者定义函数的常量,并将这些常量连接到数据源和输出端来实现。

在示例输入文件中,"Amount"(数量)元素实际上代表的是每个商品的订购数量,不应乘以节点函数中定义的货币转换因子。可以通过右键单击相应的函数符号,然后在上下文菜单中取消勾选“继承输出节点函数”来将“Amount”定义为例外情况。

CSV输出文件还有一个要求:每个条目的单价和小计价格必须以美元符号开头。输出文件定义显示,“单价”和“价格”列被定义为字符串类型,MapForce 会自动将源数据中的小数转换为字符串。

在输出组件的“行”节点上应用一个额外的节点函数,即可添加前导美元符号,具体操作方式如下所示:

为了防止此节点函数应用于所有包含字符串数据的列,我们对“公司”和“文章”两列进行了例外处理。现在,关于如何使用节点函数映射分层数据的示例已经完成。

与其他 MapForce 示例一样,为了展示结果,这里提供了一个源数据文件,用于进行数据映射。以下是在 XMLSpy XML 编辑器中查看的源文件:

对于需要重复转换的 MapForce 映射,例如在线订单处理系统,可以使用 MapForce Advanced Server 进行自动化。要执行映射以进行测试或一次性转换,只需在映射设计窗口下点击“输出”按钮即可。

无论如何,我们的示例映射产生了以下结果:

除了本文中描述的数据映射功能,MapForce还包含其他多种节点函数示例。MapForce的集成帮助系统甚至提供了一个循序渐进的教程,指导用户从零开始构建节点函数映射。

要亲身体验节点功能如何简化层次化数据的映射,请点击此处,下载一个功能完善的 MapForce 免费试用版

更新: 请查看这篇文章,其中介绍了另一种策略,该策略基于节点元数据(例如节点名称、节点长度、节点数据类型的精度、自定义节点注释等)来应用节点函数。