> ## 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.

# 使用条件编辑器

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

export const siteNameShort = "知行之桥";

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

要打开编辑器，请将鼠标悬停在目标文档中的节点上，然后单击过滤器 <img src="https://mintcdn.com/qiao/BoZrJ8_ctEN6h_9z/public/images/xmlmap_condition_icon.png?fit=max&auto=format&n=BoZrJ8_ctEN6h_9z&q=85&s=2bc7f9b7370abde6d59964f864bd318c" alt="filter" noZoom style={{ display: "inline-block", verticalAlign: "middle", height: "0.9em", margin: 0 }} width="25" height="24" data-path="public/images/xmlmap_condition_icon.png" /> 图标。

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/edi_condition_editor.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=b0008ff19484b4f4024a1fdefca5f959" width="800" data-path="public/images/edi_condition_editor.png" />

为条件命名，然后单击**添加规则**或**添加组**。

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

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

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

<img src="https://mintcdn.com/qiao/BoZrJ8_ctEN6h_9z/public/images/xmlmap_condition_select.png?fit=max&auto=format&n=BoZrJ8_ctEN6h_9z&q=85&s=5930984f0d0b7d6ff002865a3ee71a5f" width="800" data-path="public/images/xmlmap_condition_select.png" />

可以对规则和组重新排序。单击手柄 <img src="https://mintcdn.com/qiao/BoZrJ8_ctEN6h_9z/public/images/xmlmap_condition_handle.png?fit=max&auto=format&n=BoZrJ8_ctEN6h_9z&q=85&s=ab7c7a9c8df56171a20438f674bb6c25" alt="handle" noZoom style={{ display: "inline-block", verticalAlign: "middle", height: "0.9em", margin: 0 }} width="20" height="21" data-path="public/images/xmlmap_condition_handle.png" /> 并将对象拖动到新位置。

完成条件定义后，使用运算符右侧的文本框指定满足条件时应发生的情况。

选择以下状态：

* 成功
* 警告
* 错误

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

<Note>单击**配置警报**打开新的浏览器选项卡，可以在**设置**页面的**警报**选项卡上设置**电子邮件设置**。如果这些配置不正确，电子邮件通知将失败。</Note>

最后，使用文本框的 **Else** 部分来指定当条件不满足时应该发生什么。

<img src="https://mintcdn.com/qiao/BoZrJ8_ctEN6h_9z/public/images/xmlmap_condition_rightside.png?fit=max&auto=format&n=BoZrJ8_ctEN6h_9z&q=85&s=7dbaae79832ace86cf7c5e9d71b58651" width="400" data-path="public/images/xmlmap_condition_rightside.png" />

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

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

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

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

<img src="https://mintcdn.com/qiao/BoZrJ8_ctEN6h_9z/public/images/xmlmap_condition_else.png?fit=max&auto=format&n=BoZrJ8_ctEN6h_9z&q=85&s=4ca93028c9aa66a8d7806294c4ebb8d9" width="400" data-path="public/images/xmlmap_condition_else.png" />

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

## 脚本模式

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

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

打开脚本模式后，使用窗口编写自定义条件，然后使用页面右侧的选项，按照上述方法操作：

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

<img src="https://mintcdn.com/qiao/Pa-LScG1ebkabWPi/public/images/edi_mapping_condition_script_mode.png?fit=max&auto=format&n=Pa-LScG1ebkabWPi&q=85&s=1852ec09f9b44aa1c1e56bdee5504e47" width="800" data-path="public/images/edi_mapping_condition_script_mode.png" />

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

自定义条件编辑器的一种常见用途是比较源文档中的两个动态值（而不是将单个动态值与静态值进行比较）。

例如，可以使用以下自定义条件来查看源 XML 中的两个值是否相等：

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

<Note>上例中的单引号是必需的。</Note>

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

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

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

有关所有 {siteNameShort}Script 格式化器的详细信息，请参阅[格式化器](/26.2/self-hosted/zh/scripting/value-formatters/formatters)。
