---
title: 利用增强节点功能进行结构化数据映射
date: 2024-05-03
categories:
  - data-integration
  - tools
tags:
  - data-integration
  - data-mapping
  - mapforce
  - software-tools
description: MapForce 中的特殊过滤器可以增强节点的功能，从而更好地处理结构化数据
---
Status: #blog

Tags:  #data-integration #data-mapping #mapforce #software-tools

Categories: [data-integration](/blog/zh/category/data-integration.md) 
# 利用增强节点功能进行结构化数据映射

我们之前曾报道过一项[对节点功能的增强支持](https://www.altova.com/blog/node-functions-simplify-mapping-hierarchical-data-structures/)，该功能旨在简化结构化数据的映射过程，通过消除在映射中重复复制粘贴函数的需求。重复使用相同的函数不仅会使映射布局变得混乱，还会使数据映射更难理解和修改。

MapForce 还提供了额外的过滤器，用于定义节点函数。这些参数允许开发者根据自定义定义的标准，将函数和默认值应用于特定的节点。例如，您可以根据节点的元数据（如节点名称、节点长度、节点数据类型的精度、自定义的节点注释等）来应用节点函数。

让我们来看一个具有增强节点功能的映射关系。

![](/blog/images/mapping-structured-data-with-node-functions.jpg)

<!--more-->

当然。请提供您需要翻译的英文文本 [数据映射](https://www.altova.com/zh/mapforce) 以下是随 MapForc 一起安装的 "PriceCalculation.mfd" 节点函数示例。该示例根据一系列商品的原始成本和加价系数，计算出最终的销售价格。源数据是一个 CSV 格式的文本文件，输出结果是一个 XML 文件。

[![一个 MapForce 示例，展示了如何使用节点函数来映射结构化数据](/blog/images/mapping-structured-data-example.png)](mapping-structured-data-example.png)

在这个映射关系中，一个 [节点函数](https://www.altova.com/zh/mapforce#node-functions) 该属性被定义并应用于输出文件中的“Articles”元素及其子元素。双击“Articles”元素左侧的加粗功能图标，即可打开该节点的函数定义。

[![在结构化数据映射中查看节点函数](/blog/images/open-node-function.png)](open-node-function.png)

位于左上角的“应用范围”下拉菜单表明，该功能旨在应用于“Article”的所有子元素。 “功能描述”部分说明，该功能使用节点元数据元素“node_fractionDigits”作为“四舍五入”函数的参数。 如果任何子元素未定义“node_fractionDigits”，则将使用零作为替代值。

我们可以通过点击图像上方中央的“编辑”按钮，进一步了解节点函数。这将打开一个单独的数据映射窗口，显示节点函数，其界面类似于用户自定义函数：

[![定义一个节点函数，用于将结构化数据进行映射](/blog/images/node-function-definition.png)](node-function-definition.png)

位于左下角的“mapping”项中的“node_fractionDigits”参数，会根据目标数据的结构，为该函数提供一个输入值。接下来，让我们更深入地了解节点的元数据，以便找到“node_fractionDigits”参数。

### 节点元数据定义

任何结构化数据文件可用的节点元数据都来源于该数据结构的定义本身。在我们的例子中，映射目标组件是一个 XML 文档。因此，任何节点可用的元数据都定义在 XML 模式中。

以下图片展示了在 XMLSpy 软件的图形化界面中，价格计算 (PriceCalculation) XML 模式的显示效果

![Altova 提供的图形化 XML 模式视图，用于目标映射，以实现结构化数据的映射](/blog/images/altova-xml-schema-view.png)

图中标注的“SalePrice” XML 元素被定义为“Amount”类型的实例，而“Amount”类型本身是一个十进制数，最多包含两位小数，如右下角的“Facets”窗口所示。因此，对于“SalePrice”节点，其“node_fractionDigits”元数据值为 2。

对于任何结构化数据文件，可用的节点函数参数始终取决于数据类型——例如 XML、关系数据库、PDF、CSV 文件等——以及模式定义中包含的详细程度。

### 使用节点函数参数来映射结构化数据

在创建新的节点函数时，您首先会看到一个原始值和一个结果值，它们之间尚未建立连接。点击蓝色的“添加节点特定参数”按钮，以插入一个节点函数参数。这将打开“节点特定参数”对话框，您可以在其中选择一个节点参数：

![添加一个节点函数参数，用于映射结构化数据](/blog/images/add-node-function-parameter.png)

请注意，当某个节点不支持所选的元数据类型时，系统会提供相应的选项。在价格计算映射中，这种行为直接在节点函数定义中进行处理。节点函数仅适用于数值数据类型，并且对于任何未指定 "fractionDigits"（小数位数）的节点，系统会使用 "substitute-missing" 函数，用零来代替缺失的值。

### 观察节点函数执行过程

我们可以在输出组件的任何节点上，通过右键单击的上下文菜单设置断点，并使用内置的 MapForce 调试器来观察函数的执行过程。

在下面的部分视图中，我们设置了断点在“SalePrice”字段上。我们从“调试”菜单执行了映射操作，程序在断点处暂停，并在主映射窗口中显示了中间值。

![使用内置的 MapForce 调试器查看节点函数的执行结果](/blog/images/node-function-debugging.png)

我们可以看到，通过映射计算得到的“销售价格”的最后一个值为 49.183323875。该节点的函数将最终值四舍五入为 49.18。

在主映射窗口的调试结果中，不会显示实际节点函数的执行过程，但点击“消息”窗口可以打开该节点函数，并显示所有中间值

![Altova MapForce 中用于映射结构化数据的“消息”窗口](/blog/images/messages-window.png)

![可以在内置的 MapForce 调试器中查看节点功能的执行详情](/blog/images/node-function-debug-result.png)

MapForce 软件中预装了一些示例，这些示例包含了多种节点函数数据映射。此外，MapForce 的集成帮助系统甚至提供了一个循序渐进的教程，指导用户从零开始构建节点函数映射。

您甚至可以修改这里描述的示例映射，亲身体验输出的变化。例如，您可以编辑 XML 模式，允许使用三个小数位，或者修改映射，允许节点函数在 "Article" 的第一个子节点（即 "Number" 节点）上执行，然后查看新的结果。

要了解节点函数的工作原理，请观看这个 MapForce 演示视频。

![](https://www.youtube.com/watch?v=EvuwgaKOkjA)
