为令人困惑的标题表示歉意,但我不确定如何最好地描述这一点。基本上,我在源模式中有一条记录,该记录被循环以在目标模式中创建5条不同的记录。
这些记录中的每一个都是基于源模式中字段的值创建的,因此可以将正确的信息映射到每个记录。在这种情况下,它是有关买方,供应商等的地址信息。
目标架构中的每个记录也都有一个联系人记录,其中包含姓名,电话等字段。
我的任务是将源模式中的字段映射到目标模式中买方的联系人记录,而不是源模式中买方的联系人详细信息。
买方的结构(目标架构)
正在循环的源模式中记录的结构。在目标模式中创建不同的记录之前,我已经标记了要检查的字段的值,顶部是蓝色,底部是包含联系人详细信息的记录。
我不能像往常一样映射它们的原因是CTALoop1在正在映射的当前记录的范围之内。因此,在映射买方时,我无法从其他NADLoop1访问联系方式,因为它们不在循环范围之内。
如您所见,只有NAD01 = PO的NADLoop1包含联系方式,而这些联系方式不在范围内,因此不会被映射到买方。
如何映射另一条记录(而不是循环到目标架构的记录)中的CTALoop1详细信息?我不会使用XSLT脚本,但是应该说,当前循环是使用可视映射器完成的,我知道添加XSLT时可能会导致问题。
答案 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>