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

Mapping record from inside a loop to destination record that is not part of the scope

对于令人困惑的标题,我深表歉意,但我不确定如何最好地描述它。基本上我的源模式中有一条记录正在循环以在目标模式中创建 5 个不同的记录。

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

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

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

买方结构(目标架构)

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

我不能像往常一样映射它们的原因是 CTALoop1 在当前映射的记录范围内。因此,当买家被映射时,我无法从不同的 NADLoop1 访问联系人详细信息,因为它们不在循环范围内。

我的输入文件包含以下内容:

如您所见,只有 NAD01 = PO 的 NADLoop1 包含详细联系信息,并且这些未映射到买方,因为它们在范围之外。

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

我设法通过以下内联 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>