如何使用BizTalk平面文件映射向导嵌套重复项?

时间:2011-02-16 21:19:50

标签: biztalk

我有一个包含重复部分的平面文件,我很困惑如何通过BT平面文件映射向导创建模式。该文件如下所示:

001,bunch of data
002,bunch of data
006,bunch of data
006A,bunch of data
006B,bunch of data
006B,bunch of data
006,bunch of data
006A,bunch of data
006B,bunch of data

如您所见,006 *记录可以重复。我想要结束看起来像这样的XML:

<001Stuff>...</001Stuff>
<002Stuff>...</002Stuff>
<006Loop>
   <006Stuff>...</006Stuff>
   <006AStuff>...</006AStuff>
   <006BStuff>...</006BStuff>
   <006BStuff>...</006BStuff>
</006Loop>
<006Loop>
   <006Stuff>...</006Stuff>
   <006AStuff>...</006AStuff>
   <006BStuff>...</006BStuff>
</006Loop>

显然,我不能将第一组006 *记录设置为“重复记录”而忽略第二组记录。我习惯通过向导处理单个重复行(即第一个之后的另一个006行)而不是嵌套这样的东西 - 有关如何继续的任何建议吗?谢谢!

2 个答案:

答案 0 :(得分:3)

使用平面文件架构向导非常困难,只有它可以帮助您。我似乎总是要稍微调整一下它的输出。

为了使事情变得更容易,我建议您将示例文档限制为整个<006>结构的一次出现。您不必使用平面文件架构向导将多行设置为Ignored

001,bunch of data
002,bunch of data
006,bunch of data
006A,bunch of data
006B,bunch of data
006B,bunch of data

接下来,每个重复结构都应该包含在Xml Schema定义中的相应重复记录中。

请注意,您始终可以在嵌套结构上递归运行平面文件架构向导,以获得更细粒度的控制。所以我建议首先使用一个包罗万象的重复<006>结构来运行向导,如下所示:

enter image description here

然后,您可以右键单击结构,并提供嵌套子结构的更详细定义,仅突出显示示例内容的子集,如下所示:

enter image description here

然后,最重要的部分:您需要将Child Order属性调整为Conditional Default以获取重复结构,因为只有文档文件末尾有一个空行,向导无法帮助您解决这种情况。

作为参考,您得到的结构应如下所示:

enter image description here

使用以下设置:

  • BunchOfStuff (Root):分隔,0x0D 0x0A,后缀。
  • _001Stuff:分隔符,,,前缀,标记标识符001
  • _002Stuff:分隔符,,,前缀,标记标识符002
  • _006Loop:分隔,0x0D 0x0A条件默认
  • _006Stuff:分隔符,,,前缀,标记标识符006
  • _006AStuff:分隔符,,,前缀,标记标识符006A
  • _006BLoop:分隔,0x0D 0x0A条件默认
  • _006BStuff:分隔符,,,前缀,标记标识符006B

希望这有帮助。

答案 1 :(得分:0)

从第一个006的第一个开始,记录到第二个006的开始处理所有内容,记录为一个记录。定义006记录时,也将其设置为重复记录。这应该为每个660,组和每个600下的节点创建一个节点。

这就是我想要的。

这是我工作2分钟后的输出。除了节点/元素名称,我认为它是你想要的。您仍然需要为数据中的每个字段创建单独的元素。

&lt; _x0030_01 xmlns =“”&gt; 001,一堆数据 &lt; _x0030_02 xmlns =“”&gt; 002,一堆数据 &lt; _x0030_06 xmlns =“”&gt; &lt; _x0030_06_Child1&gt;一堆数据 &LT; _x0030_06_Child2&GT; &lt; _x0030_06_Child2_Child1&gt; A,一堆数据 &LT; _x0030_06_Child2&GT; &lt; _x0030_06_Child2_Child1&gt; B,一堆数据 &LT; _x0030_06_Child2&GT; &lt; _x0030_06_Child2_Child1&gt; B,一堆数据 &lt; _x0030_06 xmlns =“”&gt; &lt; _x0030_06_Child1&gt;一堆数据 &LT; _x0030_06_Child2&GT; &lt; _x0030_06_Child2_Child1&gt; A,一堆数据 &LT; _x0030_06_Child2&GT; &lt; _x0030_06_Child2_Child1&gt; B,一堆数据