【问题标题】:Biztalk Map create duplicate target nodeBiztalk Map 创建重复的目标节点
【发布时间】:2014-09-16 07:08:39
【问题描述】:

使用 biztalk 映射器,我需要复制一个目标节点。我已经创建了我的问题的简化版本。请参阅下面的地图链接以获取源和目标架构......糟糕,抱歉,没有足够的积分来发布图片......

我需要为每个 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?

【问题讨论】:

  • (我对 BizTalk 一无所知。)您为什么使用 XSLT 来转换 XML?这就是它的用途。
  • 作为一个狂热的 BizTalker,我从不使用映射器,总是使用 XSLT,但问题再次出在映射器上,而不是如何在 XSLT 中进行。
  • @PieterVandenheede 那么为什么要标记 XSLT?
  • 好的,没看到那个,我已经纠正了。
  • @michael.hor257k 抱歉,我认为这涉及 xslt。我将删除 xslt 标记。

标签: biztalk biztalk-mapper


【解决方案1】:

我们使用了 Mapforce,它很容易做到这一点。然后我们获取 XSLT 并将其作为内联 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>

谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多