BizTalk 映射累积字符串 Functoid

BizTalk Map Cumulative String Functoid

我遇到 BizTalk 映射问题,我需要将数据从源架构复制到目标架构,但有一个条件。

我想复制 3 个同名节点的值,只有一个值除外。让我解释得更好。

举个例子:

<testxml>
    <node>abc</node>
    <node>def</node>
    <node>ghi</node>
    <node>jkl</node>
</testxml>

使用字符串连接,我设法将目标架构上的数据获取到以下内容:

<testxml>
    <node>abcdefghijkl</node>
</testxml>

但是我希望输出类似于以下内容:

<testxml>
    <node>abcdefjkl</node>
</testxml>

因此我从输出中提取值 'ghi'。

有什么办法可以实现吗?

注意:我不能使用字符串提取,因为我需要提取的文本位于字符串的中间

这可以通过脚本 functoid 和一些 custom inline XSLT:

轻松实现

<xsl:variable name="outputval" select="concat(//node[1],//node[2],//node[4])" />

<xsl:element name="node">
<xsl:value-of select="$outputval" />
</xsl:element>

我为解决此问题所做的工作是使用自定义正则表达式 C# 脚本:

public String Trim(String Input) {
    String Output = Regex.Replace(Input, "ghi","");
return Output;
}

这已经解决了我删除不需要的字符串值的问题。 正如 Jeroen Maes 指出的那样,这也可以通过使用自定义 Functoid 脚本的内联 XSLT 来完成。

两种解决方案都给出以下输出:

<testxml>
    <node>abcdefjkl</node>
</testxml>

这里是 "cleanest" 解决方案(注意脚本 functoid 是危险的,因为它在某些情况下会导致内存泄漏,例如大文件,您必须仅在极端情况下使用它,此处提供了更多详细信息 https://support.microsoft.com/en-us/kb/918643),现在对于你的问题,你可以通过组合不等于运算符(你基本上告诉你的元素不应该等于 JKL 或其他)来做到这一点,然后添加一个累积连接 functoid,你将在你的输出中拥有所有你除了不应该连接的字符串

你可以在附件中找到我制作的一个小样本 Sample Demo