我有一个包含重复部分的平面文件,我很困惑如何通过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行)而不是嵌套这样的东西 - 有关如何继续的任何建议吗?谢谢!
答案 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>
结构来运行向导,如下所示:
然后,您可以右键单击结构,并提供嵌套子结构的更详细定义,仅突出显示示例内容的子集,如下所示:
然后,最重要的部分:您需要将Child Order
属性调整为Conditional Default
以获取重复结构,因为只有文档文件末尾有一个空行,向导无法帮助您解决这种情况。
作为参考,您得到的结构应如下所示:
使用以下设置:
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,一堆数据