虚拟节点
Version 24.2.9039
虚拟节点
虚拟节点是添加到目标结构中的特殊节点,不会直接出现在输出 XML 中。相反,这些虚拟节点提供了实现影响其他(非虚拟)节点在输出中的显示 / 值的逻辑的机会。
XML Map 端口支持三种类型的虚拟节点:
- 脚本代码
- 条件
- 循环
脚本代码
代码脚本虚拟节点提供了编写不需要返回输出值的自定义 ArcScript 的机会。通常,这些节点将使用特殊的 _map 项来存储需要在映射中稍后引用但不需要在当前上下文中输出的值。
例如,Map Item 部分中描述的场景很适合作为虚拟代码脚本节点。行项目成本的总和需要在行的 Foreach 循环中计算并返回输出到 outside。因此,Foreach 循环中的虚拟代码脚本节点 within 可以计算该值(而不是输出它),然后可以在非虚拟节点 outside 循环中引用(作为输出)该值。
要创建代码脚本虚拟节点,请按照下列步骤操作:
- 右键单击目标节点并选择“新增 > 代码脚本”。
- 输入脚本名称。
- 提供脚本。 编辑器会在键入时验证的表达式,因此如果看到 无效脚本 消息,则表示存在语法问题。 完成后,单击“保存”。
要创建条件虚拟节点,请执行以下步骤:
- 右键单击目标节点并选择“新增 > 条件”。
- 单击新条件旁边的漏斗图标以创建条件规则。 有关详细信息,请参阅条件。
条件
条件虚拟节点基于共享条件,将输出元素组合在一起。如果条件为真,则条件节点的所有子节点都将出现在输出中,如果条件为假,则不会出现。
这在功能上等同于独立地向每个单独的节点添加相同的条件。对于影响许多不同节点的条件,创建单个条件节点,然后使所有相关输出节点成为条件节点的子节点可能更方便。
循环
循环虚拟节点的功能与父节点之间的 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 关系来实现:
如果在 DataReading 和 OutputData 之间建立了Foreach 关系,则结果中将重复 OutputData 元素。 Loop 节点避免了这种层次结构的重复,并将值展平到单个 OutputData 元素中。
要添加上例中所示的循环节点,请按照下列步骤操作:
- 右键单击 TemperatureReading 节点并选择 新增 > 循环。 为循环指定一个有意义的名称,然后单击“保存”。
- 将源 DataReading 节点拖到循环上以创建 Foreach 关系。
- 将源 Temperature 节点映射到目标 TemperatureReading 节点。