> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kasoftware.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 使用条件编辑器

> 如何使用知行之桥中的条件编辑器向映射中的目标节点添加条件逻辑。

**条件映射编辑器**支持向目标节点添加条件，以便仅在条件为真时它们才包含在输出文档中。该编辑器还允许根据源的值设置目标节点的值。可以通过添加单个规则和/或规则组来构建复杂的条件，然后指定满足条件时映射应采取的操作。

要打开编辑器，请将鼠标悬停在目标文档中的节点上，然后单击过滤器 ![filter](https://mintcdn.com/qiao/cAp6sdkg0SyWJqZM/26.4/images/xmlmap_condition_icon.png?fit=max\&auto=format\&n=cAp6sdkg0SyWJqZM\&q=85\&s=c7c40d432c0782b5b704db54321febd6) 图标。

![](https://mintcdn.com/qiao/92y00drsn6lqgU2C/26.4/images/edi_condition_editor.png?fit=max\&auto=format\&n=92y00drsn6lqgU2C\&q=85\&s=8551bf65703260ea596e4e7106a7ce0f)

为条件命名，然后单击**添加规则**或**添加组**。**值**字段会预先填入源元素的 XPath。如果需要选择其他源值，请单击该字段以打开下拉列表。

![](https://mintcdn.com/qiao/92y00drsn6lqgU2C/26.4/images/edi_condition_first_rule.png?fit=max\&auto=format\&n=92y00drsn6lqgU2C\&q=85\&s=174ed586d77162905818f0ce6ff884bd)

构建规则时，请使用下拉菜单进行选择。可以从以下选项中进行选择：

* 输入 XML
  * 值：正在评估的 XPath 处的值
  * 值类型：值的数据类型（字符串、数字、日期时间）
  * 出现次数：XPath 在文档中出现的次数
  * 索引：表示正在评估的 Foreach 循环当前迭代的索引
* 消息头
  * 值：正在评估的消息头的值
  * 值类型：值的数据类型（字符串、数字、日期时间）
* 变量
  * 值：被评估变量的值
  * 值类型：值的数据类型（字符串、数字、日期时间）

每条规则的右侧（运算符之后）都有自己的源下拉列表。除了左侧可用的源之外，右侧还包含仅在右侧可用的**静态值**：

* **静态值**（默认）：用于输入字面比较值的自由文本输入框。仅在右侧可用。
* **输入 XML**
* **消息头**
* **变量**

右侧下拉列表有以下限制：

* 当运算符为**包含**、**开头是**、**结尾是**、**匹配 glob**、**匹配正则表达式**、**在列表中**或**不在列表中**时，或者当左侧类型为**索引**或**出现次数**时，源下拉列表会锁定为**静态值**
* 当运算符不需要值（**为空**、**不为空**、**为 null** 和**不为 null**）时，右侧会完全隐藏
* 当左侧类型为**值类型**时，右侧下拉列表会显示一组固定选项：**字符串**、**数字**或**日期时间**

为条件选择 XPath 时，编辑器会显示文档的树形表示形式，以便可以轻松找到所需的 XPath，如下图所示。

![](https://mintcdn.com/qiao/cAp6sdkg0SyWJqZM/26.4/images/xmlmap_condition_select.png?fit=max\&auto=format\&n=cAp6sdkg0SyWJqZM\&q=85\&s=64ab5de6d62e75c48edc21e94d211d58)

可以对规则和组重新排序。单击手柄 ![handle](https://mintcdn.com/qiao/cAp6sdkg0SyWJqZM/26.4/images/xmlmap_condition_handle.png?fit=max\&auto=format\&n=cAp6sdkg0SyWJqZM\&q=85\&s=8557e0a3f070ada9298f149e9ab28cbc) 并将对象拖动到新位置。

完成条件定义后，使用右侧窗格指定满足条件时应发生的情况。

![](https://mintcdn.com/qiao/cAp6sdkg0SyWJqZM/26.4/images/xmlmap_condition_rightside.png?fit=max\&auto=format\&n=cAp6sdkg0SyWJqZM\&q=85\&s=406f3b1b1674767a414a6254ae83442d)

选择以下状态：

* 成功
* 警告
* 错误

选中**发送通知**并填写**发送给**和**主题**字段，以发送有关条件状态的电子邮件。

> [!NOTE]
>
> 单击**配置警报**会在新的浏览器选项卡中打开[通知](https://docs.kasoftware.com/26.4/self-hosted/zh/getting-started/administration/settings/alerts.md)页面，可以在其中配置电子邮件设置。如果这些配置不正确，电子邮件通知将失败。

最后，使用右侧窗格的 **Else** 部分来指定当条件不满足时应该发生什么。

使用 **否则，将操作设置为** 下拉列表选择是否：

* **排除元素**，从映射中完全排除元素
* **映射值**，无论如何都映射该值
* **分配不同的值**，分配不同的值（保存条件后定义为表达式或自定义脚本）

状态和通知选项的工作方式与顶部部分相同。

保存条件时，它会出现在映射编辑器中，并且其行为方式与映射中任何其他叶节点相同。可以从源端拖放元素，或为其编写表达式或自定义脚本。

![](https://mintcdn.com/qiao/cAp6sdkg0SyWJqZM/26.4/images/xmlmap_condition_else.png?fit=max\&auto=format\&n=cAp6sdkg0SyWJqZM\&q=85\&s=12ad3644f796b53faa895fb908b85960)

条件逻辑也可以使用前瞻语法来实现。父元素通常由子元素限定，子元素会为父元素中的值提供上下文。在这些情况下，使用前瞻语法可能比创建多个条件来排除不需要的值更容易。有关使用前瞻语法的更多详细信息，请参阅[前瞻](https://docs.kasoftware.com/26.4/self-hosted/zh/mapping/mapping-node-value-editor.md#前瞻)。

## 脚本模式

可以使用 ArcScript 语法来指定自定义条件，只需打开右上角的“脚本模式”开关即可。

### 映射条件中的脚本模式

打开脚本模式后，使用窗口编写自定义条件，然后按照上述方法使用右侧窗格：

* 设置消息的状态
* 发送通知
* 将 *Else* 条件添加到映射中，包括在不满足条件时从映射中排除元素

![](https://mintcdn.com/qiao/kYLwR1iZrGqYINH1/26.4/images/edi_mapping_condition_script_mode.png?fit=max\&auto=format\&n=kYLwR1iZrGqYINH1\&q=85\&s=2858ae1bdc8a0ac1a703045aa7e3f251)

> [!NOTE]
>
> * 编辑器会在输入时验证条件。如果看到**无效条件**消息，则表示存在某种语法问题，需要解决。
> * 如果创建的 ArcScript 条件无法在设计器中呈现，则当切换回设计器模式时，系统会警告 知行之桥 无法在设计器模式下呈现此配置。如果切换到设计器模式，将丢失对现有配置的所有更改。

#### 示例

自定义条件编辑器的一种常见用途是比较源文档中的两个动态值（而不是将单个动态值与静态值进行比较）。例如，可以使用以下自定义条件来查看源 XML 中的两个值是否相等：

`'[xpath(element1)]' == '[xpath(data/element2)]'`

> [!NOTE]
>
> 上例中的单引号是必需的。

还可以使用 ArcScript 格式化器在自定义条件中执行布尔逻辑，如下例所示：

`[xpath(element1) | equals([xpath(data/element2])])]`

请注意，此语法不需要单引号。

以下示例将 XPath 与映射中先前设置的 [`_map` 变量](../connectors/xml-map/xml-map-advanced#map-项)进行比较。`def(0)` 格式化器会在比较运行之前，为缺失的 XPath 值提供回退值。

`[xpath(FST/FST01) | def(0) | greaterthan([_map.OverUnderShipQty])]`

> [!NOTE]
>
> 此示例使用脚本模式，因为设计器右侧的源下拉列表中无法使用 `_map` 变量。对于其他动态值之间的比较（例如 XPath 与 XPath，或 XPath 与消息头或变量），可以在条件编辑器设计器中使用右侧的源下拉列表，而无需使用脚本模式。

此示例根据相对于今天的日期进行筛选。当需要检查某个日期字段是否落在相对于当前日期的时间范围内时，可以使用此模式。例如，如果 `Datetime` 为 2026-10-05，而今天是 2026-09-28，则 `datediff('day')` 返回 7，因此满足条件。

`[xpath(Datetime) | datediff('day') | isbetween(0, 15)]`

`datediff('day')` 返回日期字段与今天之间相差的天数：未来日期为正值，过去日期为负值。`isbetween(0, 15)` 包含上下两个边界值，因此该条件匹配从今天到 15 天后的日期，而过去日期对应的负值不在该范围内。

有关所有 ArcScript 格式化器的详细信息，请参阅[格式化器](https://docs.kasoftware.com/26.4/self-hosted/zh/scripting/value-formatters/formatters.md)。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.