问题描述
我有以下问题。在 BizTalk 核心 (XML) 中,我有一个可以复制几次的标签。它的基数是 n,比方说 - 理论上 0 ≤ n ≤ 99。我们称之为 Note[n]。
在传出文件(它是扁平的)中,我有五个(正好五个)适当的字段。我们称它们为 FTX1..5。所以我需要做的是将 Note[1]
(如果存在)映射到 FTX1,Note[2]
(如果存在)到 FTX2,...,Note[5]
(如果存在)到FTX5.
但这还没有结束。此任务的第二部分更为复杂。
每个 FreeText 限制为 70 个字符。但理论上每个音符都没有限制。因此,在最简单的情况下,当所有 Notes 的长度小于 70 个字符时,我应该将 Note[1..5] 映射到 FTX1..5。但。例如,如果 Note[1]
包含 200 个字符,我应该将前 70 个映射到 FTX1,接下来的 70 个映射到 FTX2,最后的 60 个映射到 FTX3。那么我应该取Note[2]
,映射到FTX4,将Note[3]映射到FTX5(如果两者都小于70)。其余的应该忽略。例如,如果 Note[1]
包含 400 个字符,我应该将前 350 个映射到 FTX1..5,截断最后 50 个,并忽略所有其他注释。等等。
是否可以仅使用 Functoids 来做到这一点?我将不胜感激。
解决方法
如果使用 Cumulative Concatenate functoid,您需要开始,这会将 Note 节点添加到一起。
之后,如果您只是想分割字符串,您可以使用 Left 和 String Extract functoids 来分割字符串。
对于以下输入
<ns0:Root xmlns:ns0="http://Scratch.SO65382125in">
<Note>This in note number 1,that needs to have some length.</Note>
<Note>This in note number 2,that needs to have some length.</Note>
<Note>This in note number 3,that needs to have some length.</Note>
</ns0:Root>
你得到这个输出
<ns0:Root xmlns:ns0="http://Scratch.SO65382125out">
<FreeText1>This in note number 1,that needs to have some length.This in note num</FreeText1>
<FreeText2>ber 2,that needs to have some length.This in note number 3,that need</FreeText2>
<FreeText3>s to have some length.</FreeText3>
<FreeText4/>
<FreeText5/>
</ns0:Root>
请注意,这是将句子连在一起,并将单词一分为二。第一个是通过在累积连接 functoid 之前向连接 functoid 添加一个空格常量来轻松修复。
输出
<ns0:Root xmlns:ns0="http://Scratch.SO65382125out">
<FreeText1>This in note number 1,that needs to have some length. This in note nu</FreeText1>
<FreeText2>mber 2,that needs to have some length. This in note number 3,that ne</FreeText2>
<FreeText3>eds to have some length. </FreeText3>
<FreeText4/>
<FreeText5/>
</ns0:Root>
为了避免将单词分开会更复杂,您可能不得不使用脚本functoids。