BizTalk Map累积字符串Functoid

时间:2015-08-06 11:06:01

标签: xml biztalk biztalk-2013 biztalk-mapper

我有一个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'。

有什么方法可以实现这个目标吗?

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

3 个答案:

答案 0 :(得分:2)

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

enter image description here

您可以在附件中找到我制作的一些样本 Sample Demo

答案 1 :(得分:1)

使用脚本functoid和一些custom inline XSLT

可以很容易地实现这一点

BizTalk mapper scripting functoid

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

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

答案 2 :(得分:0)

我要解决此问题的方法是使用自定义正则表达式C#脚本:

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

enter image description here

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

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

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