---
title: "MapForce 提供动态访问节点名称的功能"
date: "2016-10-13"
categories: 
  - "data-integration"
  - "tools"
tags: 
  - "data-integration"
  - "data-mapping"
  - "dynamic-access-to-node-names"
  - "mapforce"
description: MapForce 能够动态访问节点名称，这简化了数据映射过程。它允许灵活、即时地创建 XML 元素和属性，从而提高了对非结构化数据的适应性。
---
Status: #blog

Tags:  #data-integration #data-mapping #dynamic-access-to-node-names #mapforce

Categories: [data-integration](/blog/zh/category/data-integration.md) | [xml](/blog/zh/category/xml.md)
# MapForce 提供动态访问节点名称的功能

在某些情况下，尤其是在处理结构松散的数据时，您可能需要将数据流中的结构化组件以及内容进行映射和转换。MapForce 可以动态访问 XML 元素的节点名称、属性，或者文本文件的列（例如 CSV 文件的内容），并将这些信息映射到目标组件。

动态访问节点名称的功能，允许实时创建目标元素和属性，而无需事先了解或明确指定这些元素的名称 [数据映射](https://www.altova.com/zh/mapforce.html). 这个功能允许您创建更加通用、灵活且可重复使用的映射关系，从而在数据模型发生变化时，减少手动干预的需求。

![关于 MapForce 2017 中动态访问节点名称的最新消息](/blog/images/shutterstock_59314036.jpg)

<!--more-->

以下是一个非常常见的CSV文件格式的示例，在这个格式中，数据字段不是通过列名来标识，而是通过同一行中相邻单元格中的标签来标识

![典型的 CSV 格式输入数据](/blog/images/csv-input-data.png)

在这个例子中，记录的格式甚至不统一：有的记录在姓氏后面包含后缀，而另一些记录则包含中间名的首字母。

对于像这类文件，一种常见的的数据映射需求是将A列的单元格映射为XML元素的名称，并将B列的单元格映射为与每个对应元素相关联的值。现在，这可以通过动态映射节点名称轻松实现。下面我们来看看如何操作。

### 动态访问 XML 元素的节点名称

我们将首先创建一个非常简单的 XML Schema，用于定义映射的目标。该 Schema 使用 <xs:any> 元素来定义一个复杂的 <Employee> 元素，该元素可以包含任何子元素。以下是在 XMLSpy Schema 视图中呈现的 Schema：

![XMLSpy 数据映射目标模式视图](/blog/images/target-schema-view.png)

我们首先导入CSV文件，然后使用一个分组函数，该函数会在输入文件中A列中每出现一次“FirstName”时，创建一个新的<Employee>元素。

![MaForce 数据映射，显示一个组函数](/blog/images/data-mapping-group-function.png)

接下来，我们导入目标 XML 模式，然后右键单击 <Employee> 元素

![MapForce 上下文菜单，用于选择“动态访问”功能 ](/blog/images/mapforce-context-menu.png)

我们将选择“显示子元素，并使用动态名称”的选项，这会打开一个对话框，我们将在其中选择“文本”作为子元素的的数据类型。 这样，<Employee>元素的子元素的节点名称和内容就会显示出来，就像这里所示：

![MapForce 数据映射功能，支持动态访问节点名称](/blog/images/dynamic-node-access.png)

现在，将 Field1（CSV 文件的 A 列）映射到子元素的节点名称，将 Field2（B 列）映射到元素的内容，是一个简单的过程。以下是最终的数据映射关系：

![MapForce 数据映射，支持动态访问节点名称](/blog/images/dynamic-access-data-mapping.png)

位于顶部的“group-starting-with”函数会在输入文件中每次遇到“FirstName”时，创建一个新的 <Employee> 元素。然后，对于每一行，A列中的条目会生成子元素的名称，而B列中的条目将成为每个子元素的值。

上述映射的结果如下所示：

![MapForce 动态数据访问和映射输出](/blog/images/dynamic-access-mapping-output-1.png)

使用动态访问节点名称的数据映射的优势在于，您无需对输入数据进行全面的调查，以识别和映射每一个可能的元素名称。

假设一种常见的生产场景，您需要从一个或多个外部来源接收多个输入文件，并使用 MapForce Server 和 FlowForce Server 自动执行映射过程。如果某个输入文件突然包含一个意外的子元素，例如“办公地点”或“邮件收件点”，数据不会丢失。

### 动态访问 XML 属性的节点名称

您还可以动态映射 XML 属性的名称，就像创建目标元素和属性一样，可以在运行时进行，而无需事先全部定义。
