我有一个带有嵌套重复节点的flatfile,需要将其分配到单个记录。
flatfile:
ABC DEF 1234.456789012345678
000000123456L01 Supplier 0
001000123456L01 00301Address 1
000001234567L01 Supplier 1
001001234567L01 00301Address 2
001001234567L01 00301Address 3
001001234567L01 00302Address 4
以000开头的行是供应商,从001开始是供应商地址。 字符4-15是供应商代码。
目前,除了输出一个包含每个供应商所有地址的记录外,我无法做到:
<Record>
<Supplier>
<Supplier_code>001234567L01</Supplier_code>
<Supplier_name>Supplier 1</Supplier_name>
</Supplier>
<Address>
<Supplier_address>Address_2</Supplier_address>
<Supplier_address>Address_3</Supplier_address>
<Supplier_address>Address_4</Supplier_address>
</Address>
</Record>
但是,预期的输出是每个供应商地址一条记录:
<Record>
<Supplier>
<Supplier_code>001234567L01</Supplier_code>
<Supplier_name>Supplier 1</Supplier_name>
</Supplier>
<Address>
<Supplier_address>Address_2</Supplier_address>
</Address>
</Record>
<Record>
<Supplier>
<Supplier_code>001234567L01</Supplier_code>
<Supplier_name>Supplier 1</Supplier_name>
</Supplier>
<Address>
<Supplier_address>Address_3</Supplier_address>
</Address>
</Record>
<Record>
<Supplier>
<Supplier_code>001234567L01</Supplier_code>
<Supplier_name>Supplier 1</Supplier_name>
</Supplier>
<Address>
<Supplier_address>Address_4</Supplier_address>
</Address>
</Record>
我如何更改FlatFile架构以完成上述操作?
答案 0 :(得分:3)
您无法使用平面文件反汇编程序一次完成此操作。没有办法表明需要对某些节点进行分组/拆分等。但是,在地图中执行此操作相当简单。创建一个与您的第一个结构相似的新架构,但是有一个额外的根节点允许Record
重复,并且您的地图将如下所示:
并确保MaxOccurs
元素和目标unbounded
节点上的Supplier_address
设置正确(可能是Record
)。将此映射添加到您的接收端口,它将根据需要进入MessageBox拆分。请注意,您确实需要新架构,因为您不能拥有包含多个根节点的消息。如果您需要进一步解析,可以将其设置为信封模式,请求响应端口订阅它,并在响应端使用XML反汇编程序来解除它。在平面文件dasm完成其魔法之后,您唯一的另一个选择是在自定义管道组件中执行此操作。