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
我遇到 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