自定义脚本
要访问节点值编辑器中提供的格式化器之外的其他操作,请点击目标元素旁边的尖括号arc:info 部分,其中定义了脚本可用的输入参数。此外还有一个输出元素 result.text,可设置为返回自定义脚本的结果。result.text 中返回的值将用于填充目标元素。
例如,可以使用脚本根据商品名称确定商品的 SKU。完成此操作的一种简单方法是结合使用 select/case 语句和 XPath 格式化器来检查输入 XML 的 ItemName 元素:

编辑器会在键入时验证脚本。如果看到“Invalid Script”消息,则表示存在某种语法问题。
Script 运算器
Script 在代码视图中完全可用,包括所有运算器。例如,源 XML 可能包含某个商品 ID,而该商品的 SKU 必须从数据库中检索;在这种情况下,可以使用 dbQuery 运算器按 ID 查找 SKU。条件逻辑
Script 还支持在映射模板中执行条件逻辑。arc:if 关键字是可用于帮助在模板中执行条件逻辑的众多关键字之一。例如:Foreach 循环索引
当元素映射位于 Foreach 循环中时,当前循环的索引始终可在自定义脚本中使用。_index 属性保留用于包含当前元素的最内层 Foreach 循环的当前索引。
例如,假设要映射一个存在于两个 Foreach 循环中的 LineItem 元素:一个循环用于文档中的每个订单,另一个循环(位于第一个循环内)用于订单中的每个商品。在 LineItem 元素映射中引用 [_index] 会返回内部循环(“item”循环)到目前为止循环的次数。该值从 1 开始计数。
Map 项
在映射中的某个位置设置脚本变量,然后在映射的其他部分再次引用这些变量会很有用。这可以通过在节点值编辑器中创建变量和/或使用下文描述的_map 项来实现。
_map 项与任何其他 Script 项一样,只是其作用范围包含 XML Map 端口处理的整个文档。_map 项的任何属性都会在整个映射过程中持续存在,并且仅在 XML Map 端口完成文件处理时清除。
例如,映射项目可能需要计算采购订单中多个行项目的总成本(映射中可能包含若干 LineItemCost 元素以及一个 TotalCost 元素)。可以使用 Script 通过设置 _map 项的属性来跟踪运行总计,如下所示:
_map.sum_cost 的当前值中(如果 _map.sum_cost 尚不存在,则默认值为 0)。如果此代码包含在遍历所有行项目的 Foreach 循环内的某个元素中,则 Foreach 循环退出时 _map.sum_cost 的值就是 TotalCost。
由于 _map 的属性会被保留,因此稍后可以在 TotalCost 元素映射中引用同一个 _map.sum_cost 值。例如: