虚拟节点

Version 23.4.8843


虚拟节点


虚拟节点是添加到目标结构中的特殊节点,不会直接出现在输出 XML 中。相反,这些虚拟节点提供了实现影响其他(非虚拟)节点在输出中的显示 / 值的逻辑的机会。

XML Map 端口支持三种类型的虚拟节点:

  • 脚本代码
  • 条件
  • 循环

脚本代码

代码脚本虚拟节点提供了编写不需要返回输出值的自定义 ArcScript 的机会。通常,这些节点将使用特殊的 _map 项来存储需要在映射中稍后引用但不需要在当前上下文中输出的值。

例如,Map Item 部分中描述的场景很适合作为虚拟代码脚本节点。行项目成本的总和需要在行的 Foreach 循环中计算并返回输出到 outside。因此,Foreach 循环中的虚拟代码脚本节点 within 可以计算该值(而不是输出它),然后可以在非虚拟节点 outside 循环中引用(作为输出)该值。

要创建代码脚本虚拟节点,请按照下列步骤操作:

  1. 右键单击目标节点并选择“新增 > 代码脚本”。
  2. 输入脚本名称
  3. 提供脚本。 编辑器会在键入时验证的表达式,因此如果看到 无效脚本 消息,则表示存在语法问题。 完成后,单击“保存”。

要创建条件虚拟节点,请执行以下步骤:

  1. 右键单击目标节点并选择“新增 > 条件”。
  2. 单击新条件旁边的漏斗图标以创建条件规则。 有关详细信息,请参阅条件

条件

条件虚拟节点基于共享条件,将输出元素组合在一起。如果条件为真,则条件节点的所有子节点都将出现在输出中,如果条件为假,则不会出现。

这在功能上等同于独立地向每个单独的节点添加相同的条件。对于影响许多不同节点的条件,创建单个条件节点,然后使所有相关输出节点成为条件节点的子节点可能更方便。

循环

循环虚拟节点的功能与父节点之间的 Foreach 映射相同,只是父节点实际上不会出现在输出 XML 中。这允许将 Source 中的重复元素“扁平化”为 Destination 中的非分层结构。通过示例最容易理解这一点。

使用以下输入 XML:

<!-- example input -->
<Items>
  <DataReading>
    <Temperature>212.5</Temperature>
  </DataReading>
  <DataReading>
    <Temperature>9.2</Temperature>
  </DataReading>
  <DataReading>
    <Temperature>5.1</Temperature>
  </DataReading>
</Items>

这需要映射到包含所有 DataReading 数据的平面结构:

<!-- desired output -->
<Items>
  <OutputData>
    <Temperature>212.5</Temperature>
    <Temperature>9.2</Temperature>
    <Temperature>5.1</Temperature>
  </OutputData>
</Items>

这可以通过与Source中每个 DataReading 元素对应的 Destination 中的 Loop 节点建立 Foreach 关系来实现:

如果在 DataReadingOutputData 之间建立了Foreach 关系,则结果中将重复 OutputData 元素。 Loop 节点避免了这种层次结构的重复,并将值展平到单个 OutputData 元素中。

要添加上例中所示的循环节点,请按照下列步骤操作:

  1. 右键单击 TemperatureReading 节点并选择 新增 > 循环。 为循环指定一个有意义的名称,然后单击“保存”。
  2. 将源 DataReading 节点拖到循环上以创建 Foreach 关系。
  3. 将源 Temperature 节点映射到目标 TemperatureReading 节点。