我有一个输入模式(input_schema):
...
<ContactNo>
<Contact_1>
<Contact-Type>MOBILE|HOME|WORK</Contact-Type>
<Contact-SubType>UK|OVERSEAS</Contact-SubType>
<Contact-CountyCode>44</Contact-CountyCode>
<Contact-No>01443788800</Contact-No>
<Contact-Ex>85000</Contact-Ex>
</Contact_1>
<Contact_2>
<Contact-Type>MOBILE|HOME|WORK</Contact-Type>
<Contact-SubType>UK|OVERSEAS</Contact-SubType>
<Contact-CountyCode>44</Contact-CountyCode>
<Contact-No>01443788800</Contact-No>
<Contact-Ex>85000</Contact-Ex>
</Contact_2>
<Contact_3>
<Contact-Type>MOBILE|HOME|WORK</Contact-Type>
<Contact-SubType>UK|OVERSEAS</Contact-SubType>
<Contact-CountyCode>44</Contact-CountyCode>
<Contact-No>01443788800</Contact-No>
<Contact-Ex>85000</Contact-Ex>
</Contact_3>
...
</ContactNo>
...
ContactNo的每个子节点只能出现一次(一个Contact_1,一个Contact_2和一个Contact_3)。我需要为Contact-Type,SubType应用一些业务逻辑来构建Contact-No,但我的问题是你如何最好地将这个结构映射到相关的out_put架构节点(这些节点最多出现20个)但是只能根据下面的input_schema架构结构,最多有三个:
...
<HomeTelephone>
<WorkTelephone>
<MobileTelephone>
...
示例输入/输出
...
<ContactNo>
<Contact_1>
<Contact-Type>HOME</Contact-Type>
<Contact-SubType>UK</Contact-SubType>
<Contact-CountyCode />
<Contact-No>01443788800</Contact-No>
<Contact-Ex/>
</Contact_1>
<Contact_2>
<Contact-Type>WORK</Contact-Type>
<Contact-SubType />
<Contact-CountyCode />
<Contact-No>01743788800</Contact-No>
<Contact-Ex>86000</Contact-Ex>
</Contact_2>
<Contact_3>
<Contact-Type>WORK</Contact-Type>
<Contact-SubType>UK</Contact-SubType>
<Contact-CountyCode />
<Contact-No>01443788800</Contact-No>
<Contact-Ex>85000</Contact-Ex>
</Contact_3>
...
</ContactNo>
...
...
<HomeTelephone>01443788800</HomeTelephone>
<WorkTelephone>0174378880086000</WorkTelephone>
<WorkTelephone>0144378880085000</WorkTelephone>
<MobileTelephone />
...
目前我正在检查Contact-Type(= Home),然后通过值映射器将输出映射到脚本functoid,以便在映射输出之前进行数据确认。这似乎导致重复的节点。
答案 0 :(得分:1)
您是否考虑在映射中使用XSLT?它不仅比BizTalk映射器更容易使用,而且更灵活和广泛使用(您可以在许多产品中本地使用XSLT)。
适当的XSLT会产生如下内容:
<xsl:for-each select="ContactNo/*">
<xsl:if test="position() < 4">
<xsl:choose>
<xsl:when test="Contact-Type/text() = 'WORK'">
<WorkTelephone>
<xsl:value-of select="Contact-No/text()" />
</WorkTelephone>
</xsl:when>
<xsl:when test="Contact-Type/text() = 'HOME'">
<HomeTelephone>
<xsl:value-of select="Contact-No/text()" />
</HomeTelephone>
</xsl:when>
<xsl:when test="Contact-Type/text() = 'MOBILE'">
<MobileTelephone>
<xsl:value-of select="Contact-No/text()" />
</MobileTelephone>
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:for-each>
这应循环显示前3个联系人并相应地列出。
请告诉我这是否符合您的需求。
免责声明:由于时间限制,我们未对此进行测试,请注意语法和输入错误。我也知道你要求使用映射器,我确信映射器完全不如原生xslt方法。