xml - 将循环内部的记录映射到不属于范围的目标记录
问题描述
为令人困惑的标题道歉,但我不确定如何最好地描述这一点。基本上,我的源架构中有一条记录,正在循环以在目标架构中创建 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>
推荐阅读
- javascript - react-collapsible 编译失败
- debian - 为什么我在 debian 控制台中得到不同的语言?
- performance - aws ElastiCache redis 慢日志具有名为 COMMAND 的命令
- react-native - 反应原生箭头函数和地理查询
- python - 在 debian 上 pip 安装失败并出现 NewConnectionError
- apache-spark - 解释 Spark 库之间的连接,例如 SparkSQL、MLib、GraphX 和 Spark Streaming
- java - 可变长度参数列表将泛型和泛型数组作为参数传递 - Java
- python - 在 Python 中重命名“_”变量
- php - PHP - Magento 2 通过 Sku 代码加载产品
- c++ - 如何访问 Qt::DisplayRole 并在 TableView 中指定列