使用节点值编辑器

Version 25.2.9314


使用节点值编辑器


节点值编辑器支持修改从源到目标的映射值。该编辑器利用功能强大的 ArcScript 语言来格式化和动态生成内容。访问节点值编辑器,请在目标文档中选择一个节点,然后选择便签和铅笔图标以显示该编辑器。

编辑器显示一个黑色面板,其中包含用于渲染结果的 ArcScript 表达式。当编辑已经映射到源 XML 元素的节点时,表达式将显示该映射的 xpath。在这里,编辑表达式以操作值,或在源 XML 中包含对其它节点的引用。

注意:编辑器会在键入时验证的表达式。 如果看到 无效表达式 消息,则表示存在某种语法问题。 这通常是由于未转义保留字符(例如方括号、圆括号或斜杠)而导致的。

将空视为 null

选中将空视为 null 将空输入值(例如长度为 0 的字符串)视为 NULL 输出值。 默认情况下未选中此选项,因此空输入值将被视为空字符串:””

在映射可能与包含不接受 NULL 值的列的数据库表交互的情况下,不选中此设置可能会很有用。 在这种情况下,空字符串值可以防止插入数据库时出现错误,或者从数据库中提取的空字符串值可能需要转换为 NULL 以更好地反映数据集。

选项卡包含一个动态生成的 XML 元素列表,您可以滚动浏览并选择所需的元素。然后,它会在编辑器中的 ArcScript 中应用正确的 xpath,可以在其中进行其他更改。

方括号中的任何表达式在 ArcScript 中都将视作对变量进行计算。在大多数情况下,变量表达式包括源文档中元素的 xpath() 值。多个方括号内的表达式可以用来表示多个变量,可以是连续的,也可以是穿插文字字符的(不在方括号内)。

例如,要组合两个不同路径的值:

<Customer>
<First>Bruce</First>
<Last>Wayne</Last>
</Customer>

一个表达式可以连接两个值:

[xpath('Customer/First')] [xpath('Customer/Last')]

消息头

消息标头可帮助知行之桥跟踪数据在流程中的进度。所有 跟踪头 都会显示在映射编辑器的消息头选项卡中,可以在表达式中引用它们。要将节点添加为跟踪头,请右键单击或点击映射中节点上的省略号,然后选择添加跟踪

还可以使用映射编辑器中的添加消息头字段并提供现有标头的名称,将其他消息标头添加到表达式中。这些头不必是跟踪标头。

标头节点允许将值映射为映射输出消息上的头。这些头节点不包含在输出 XML 中,但会作为元数据消息标头添加到输出消息中。这些头会在整个流程中与消息保持一致,并且任何下游端口都可以根据需要引用它们的值,从而轻松跟踪数据在应用程序中的进度。头节点会自动添加到节点值编辑器中的消息头选项卡中。要添加标头节点,请右键单击或点击现有节点上的省略号,然后选择添加>添加标头

头节点不会添加到跟踪头。您可以通过点击节点上的省略号并选择添加跟踪将非头目标节点添加到跟踪头中。有关更多信息,请参阅消息头

变量

在映射中的某一点设置变量并稍后在映射中再次引用这些变量可能很有用。 变量的范围包含映射处理的整个文档。 换句话说,变量的任何属性在整个映射过程中都持续存在,并且仅在 XML 映射端口完成处理文件时才被清除。

例如,映射可能需要统计采购订单中多个行项目的总成本(也许映射包括一定数量的 LineItemCost 元素和 TotalCost 元素)。 可以向 LineItemCost 添加一个变量,以对每个 LineItemCost 元素的值求和。 如果将此变量包含在遍历所有行项目的 Foreach 循环中的元素中,则当 Foreach 循环退出时,总和将是 TotalCost

要添加变量,请点击映射编辑器中节点上的省略号,然后选择添加节点>添加变量。完成后,该变量将显示在变量选项卡中,可以在表达式中引用它。

配置库

使用 配置库 选项卡将全局配置库 中的项目添加到表达式中。 如果有在整个流程的不同位置重复使用的值,这非常有用。 可以在库中定义这些值,然后在表达式的开头引用它们。 请记住,如果希望映射使用保管库中项目的_值_,则需要在方括号内引用它; 否则,编辑器会将项目 name 解释为文字。

格式化器

格式化器支持操作不同 xpath 处返回的值。格式化器在表达式中由字符(|)分隔,从左到右计算。例如:

[xpath('City') | toupper | substring(0,3)]

本例中,在返回 City 的 xpath 处的值之前,所有字符都被转换为大写,并且在结果中返回子字符串的前三个字符的。例如,如果源文档的值为:

<City>Durham</City>

结果表达式返回以下内容:

DUR

在节点值编辑器中选择格式化选项卡后,每个格式化都显示在搜索列表中。通过单击列表中的格式化器,可以将格式化器直接添加到表达式中。

字符串处理

字符串处理是节点值编辑器的常见用例。常见的字符串格式化器包括:

例如,可能希望将输入 XML 中的 CustomerName 值拆分为输出 XML 中的两个单独字段。 使用 split 格式化器来完成此操作。split 的参数是分割字符串的字符以及应返回的结果数组的索引(索引从 1 开始):

[xpath(CustomerName) | split(' ', 1)]

字符串格式化器的完整列表请参考此处

日期处理

另一个常见用例涉及将日期从源文档重新格式化为目标文档。 这由 todate 格式化器支持,它允许三个参数:

  • 输出日期格式(必填)
  • 输入日期格式(可选):如果格式化器无法自动检测输入日期时间格式,请使用此格式。
  • 严格输入格式(可选):使用它来检查传入的日期值是否与输入格式匹配。 如果不是,任务将抛出错误,而不是将日期转换为标准日期格式。 默认是不检查。 要强制检查,请将true添加到格式化器。

以下示例将 12/21/22 形式的日期转换为 Friday, 21 December, 2022 形式的日期,并检查日期值是否与输入格式匹配:

[xpath(PurchaseDate) | todate(D, "mm/dd/yy", true)]

对日期计算有用其它的 dateadddatacompare 函数,可以用来分别对日期添加或减去固定的时间段以及进行日期比较。

日期格式器的完整列表请参考此处.

数字运算

数字运算对于对源 XML 中的数值进行计算很有用。以下示例将美分转换为美元,并确保结果值是具有两个位置的十进制值:

[xpath(ItemCost) | divide(100) | decimal(2)]

数学格式化可以用来计算税收,并将税收值加到总数中。以下示例包括一组嵌套的数学格式化器表达式;每个表达式都是从左到右计算的,在返回到外部表达式之前,会对嵌套表达式进行整体计算:

[xpath(Subtotal) | divide(100) | multiply([xpath(TaxPercent) | divide(100) | add(1)]) | decimal(2)]

数字格式化的完整列表请参考此处.

前瞻语法

xpath() 格式化支持前瞻语法,以进一步指定应将源文档中的哪些值映射到目标文档。在重复的 XML 元素结构中,Lookahead 可以帮助定位特定的值。

例如,输入的 XML 可能有多个行项目,其中只有一个包含所需的值。每个行项目都有相同的 xpath,所以需要使用先行语法从相同 xpath 中检索所需的值。

下面的 XML 演示了这种情况,因为行项目元素具有匹配的 XML 结构:

<LineItem>
  <ItemType>Goods</ItemType>
  <ItemName>Widgets</ItemName>
  <ItemAmount>20.00</ItemAmount>
</LineItem>
<LineItem>
  <ItemType>Tax</ItemType>
  <ItemName>Sales Tax</ItemName>
  <ItemAmount>1.38</ItemAmount>
</LineItem>

假设 Tax 项目的金额(1.38)需要映射到目标文档,而不是 Goods 项目的金额(20.00)。由于两个行项目具有相同的 XML 结构,因此仅使用 xpath 不足以指定 Sales Tax 行项目金额。举例来说,下面的表达式使用了正确的 xpath,但检索的是 Goods 项目金额,而不是 Tax 项目金额(因为 Goods 项目金额是满足 xpath 的第一个值):

[xpath(LineItem/ItemAmount)]

为了指定 Tax 项目,表达式需要查看 LineItem 元素中的 ItemType 元素,该元素将行项目标识为 Tax 项目。因此,LineItem元素是前瞻的父项,而 ItemType 元素是前瞻的目标

前瞻语法如下:在 xpath 表达式中,在前瞻的元素之后直接添加方括号。在方括号内,提供前瞻的目标元素的 xpath,并使用 equals 表达式检查目标值(注意方括号必须用反斜杠转义):

[xpath(LineItem\[ItemType='Tax'\]/ItemAmount)]

表示为:从 ‘LineItem/ItemAmount’ 中为 ‘LineItem’ 元素找到值,其中 ‘LineItem/ItemType’ 是 ‘Tax’。表达式将返回值 1.38。

脚本模式

使用编辑器顶部的脚本模式切换按钮,将条件编辑器从设计器模式切换到脚本模式。这意味着条件必须使用 ArcScript 编写,而不是使用标准设计器模式。脚本模式允许您编写自定义的 ArcScript,该脚本不需要返回输出值。在节点上启用脚本模式后,该节点的值将显示为脚本的名称。它由以下图标表示:脚本模式