将记录从循环内部映射到不属于范围的目标记录

时间:2019-07-19 08:06:28

标签: xml xslt mapping biztalk edifact

为令人困惑的标题表示歉意,但我不确定如何最好地描述这一点。基本上,我在源模式中有一条记录,该记录被循环以在目标模式中创建5条不同的记录。

这些记录中的每一个都是基于源模式中字段的值创建的,因此可以将正确的信息映射到每个记录。在这种情况下,它是有关买方,供应商等的地址信息。

目标架构中的每个记录也都有一个联系人记录,其中包含姓名,电话等字段。

我的任务是将源模式中的字段映射到目标模式中买方的联系人记录,而不是源模式中买方的联系人详细信息。

买方的结构(目标架构)

enter image description here

正在循环的源模式中记录的结构。在目标模式中创建不同的记录之前,我已经标记了要检查的字段的值,顶部是蓝色,底部是包含联系人详细信息的记录。

enter image description here

我不能像往常一样映射它们的原因是CTALoop1在正在映射的当前记录的范围之内。因此,在映射买方时,我无法从其他NADLoop1访问联系方式,因为它们不在循环范围之内。

我的输入文件包含以下内容: enter image description here

如您所见,只有NAD01 = PO的NADLoop1包含联系方式,而这些联系方式不在范围内,因此不会被映射到买方。

如何映射另一条记录(而不是循环到目标架构的记录)中的CTALoop1详细信息?我不会使用XSLT脚本,但是应该说,当前循环是使用可视映射器完成的,我知道添加XSLT时可能会导致问题。

1 个答案:

答案 0 :(得分:0)

我设法通过以下内联XSLT解决了该问题:

<Contact>
    <Name>
        <xsl:value-of select="/*[local-name()='EFACT_D01B_ORDERS']/*[local-name()='NADLoop1'][*[local-name()='NAD']/*[local-name()='NAD01']='PO']/*[local-name()='CTALoop1']/*[local-name()='CTA']/*[local-name()='C056']/*[local-name()='C05602']"/>
    </Name>
    <Telephone>
    <xsl:value-of select="/*[local-name()='EFACT_D01B_ORDERS']/*[local-name()='NADLoop1'][*[local-name()='NAD']/*[local-name()='NAD01']='PO']/*[local-name()='CTALoop1']/*[local-name()='COM']/*[local-name()='C076'][*[local-name()='C07602'] = 'TE']/*[local-name()='C07601']"/>
    </Telephone>
    <Email>
<xsl:value-of select="/*[local-name()='EFACT_D01B_ORDERS']/*[local-name()='NADLoop1'][*[local-name()='NAD']/*[local-name()='NAD01']='PO']/*[local-name()='CTALoop1']/*[local-name()='COM']/*[local-name()='C076'][*[local-name()='C07602'] = 'EM']/*[local-name()='C07601']"/>
    </Email>
</Contact>