使用biztalk mapper,我需要复制一个目标节点。我已经创建了一个简化版本的问题。请参阅下面的源和目标架构的地图链接... Ooopps抱歉,没有足够的点张贴图片..
我需要为每个OptionNotes复制目标Option节点。 OptionNotes的值将由管道(" |")拆分,然后映射到目标代码和描述。
输入如下:
<ns0:Source xmlns:ns0="http://Test.SOAP.Source1">
<Option>
<OptionID>ID0_NoNotes</OptionID>
<OptionName>OptionName_0</OptionName>
</Option>
<Option>
<OptionID>ID1_NoNotes</OptionID>
<OptionName>OptionName_1</OptionName>
<OptionNotes>NOTE1|BLAH1</OptionNotes>
<OptionNotes>NOTE2|BLAH2</OptionNotes>
</Option>
</ns0:Source>
输出应如下:
<Destination>
<Options>
<Option>
<Code>ID0_NoNotes</Code>
<Description>OptionName_0</Description>
</Option>
<Option>
<Code>ID1_NoNotes</Code>
<Description>OptionName_1</Description>
</Option>
<Option>
<Code>NOTE1</Code>
<Description>BLAH1</Description>
</Option>
<Option>
<Code>NOTE2</Code>
<Description>BLAH2</Description>
</Option>
</Options>
</Destination>
尝试使用循环和与值映射组合,但无济于事。我不得不诉诸 内联xslt?
答案 0 :(得分:0)
我们已经使用了Mapforce,它已经轻松完成了这项工作。然后我们获取XSLT并将其作为Inline XSLT脚本functoid的一部分导入。
XSLT的制作如下:
<xsl:for-each select="ns0:Source/Option">
<Option>
<xsl:for-each select="OptionID">
<Code>
<xsl:value-of select="string(.)"/>
</Code>
</xsl:for-each>
<xsl:for-each select="OptionName">
<Description>
<xsl:value-of select="string(.)"/>
</Description>
</xsl:for-each>
</Option>
</xsl:for-each>
<xsl:for-each select="ns0:Source/Option/OptionNotes">
<xsl:variable name="var1_resultof_cast" select="string(.)"/>
<Option>
<Code>
<xsl:value-of select="substring-before($var1_resultof_cast, '|')"/>
</Code>
<Description>
<xsl:value-of select="substring-after($var1_resultof_cast, '|')"/>
</Description>
</Option>
</xsl:for-each>
谢谢大家。