Biztalk 将两个记录映射到同一节点,其中一个是另一个的子记录的迭代

Biztalk 将两个记录映射到同一节点,其中一个是另一个的子记录的迭代,biztalk,biztalk-mapper,Biztalk,Biztalk Mapper,我希望在源模式上创建一个节点到一个节点的迭代。这很容易,但当我想基于第一个节点的子节点在同一个节点上创建不同的迭代时,麻烦就来了 <cases> <customer> <account> <name>John Smith</name> <address>hello road 321</address> <current_balance&

我希望在源模式上创建一个节点到一个节点的迭代。这很容易,但当我想基于第一个节点的子节点在同一个节点上创建不同的迭代时,麻烦就来了

<cases>
    <customer>
        <account>
        <name>John Smith</name>
        <address>hello road 321</address>
        <current_balance>100</current_balance>
        <current_balance_date>20180712</current_balance_date>
        </account>
        <invoices>
             <invoice>
                <amount>231</amount>
                <paydate>20183104</paydate>
             </invoice>
             <invoice>
                <amount>2332</amount>
                <paydate>20181204</paydate>
             </invoice>
         </invoices>
     </customer>    
</cases>

约翰·史密斯
你好,321路
100
20180712
231
20183104
2332
20181204
每个客户可以有一个当前_余额,但有几个发票,我需要将它们映射到目标架构上的同一节点,并使其如下所示:

<basis>
    <toPay>100</toPay>
    <dateToPay>20180712</dateToPay>
</basis>
<basis>
    <toPay>231</toPay>
    <dateToPay>20183104</dateToPay>
</basis>
<basis>
    <toPay>2332</toPay>
    <dateToPay>20181204</dateToPay>
</basis>

100
20180712
231
20183104
2332
20181204
我尝试过表循环、常规循环、条件循环,并创建了xslt(我对此也非常缺乏经验),但似乎无法使其工作。我只能做一个或两个

编辑:我当前正在尝试xslt内联调用:

<xsl:template name="basis">

<!-- balance-parameters -->
<xsl:param name="current_balance" />
<xsl:param name="current_balance_date" />

<!-- invoice-parameters -->
<xsl:param name="amount" />
<xsl:param name="paydate" />

<xsl:element name="basis">
    <xsl:element name="toPay"><xsl:value-of select="$current_balance" /></xsl:element>
    <xsl:element name="dateToPay"><xsl:value-of select="$current_balance_date" /></xsl:element>
</xsl:element>

<xsl:for-each select="cases/customer/account/invoices/invoice">
    <xsl:element name="basis">
        <xsl:element name="toPay"><xsl:value-of select="$amount" /></xsl:element>
        <xsl:element name="dateToPay"><xsl:value-of select="$paydate" /></xsl:element>
    </xsl:element>
</xsl:for-each>

</xsl:template>


for each根本没有输出任何内容,我已经尝试了case/customer/invoices/invoices和case/customer/invoices。我根本无法实现这一点。首先,确保源模式具有basis并设置为maxOccurs=unbounded

这其实很简单。当前的_平衡应该只与链接一起工作

您将需要链接发票和基础的循环Functoid,以及链接当前余额和基础的另一个循环Functoid


这应该为xsl中的每一个创建两个,您可以使用Validate Map查看它们。

这一个应该可以工作。您应该循环输入/cases/customer/account/invoices/invoices,而不是case/customer/invoices/invoices

<xsl:template name="basis"> 
<basis>
    <toPay>
        <xsl:value-of select="/cases/customer/account/current_balance" />
    </toPay>
    <dateToPay>
        <xsl:value-of select="/cases/customer/account/current_balance_date" />
    </dateToPay>
</basis>

<xsl:for-each select="/cases/customer/account/invoices/invoice">
    <basis>
        <toPay>
            <xsl:value-of select="amount" />
        </toPay>
        <dateToPay>
            <xsl:value-of select="paydate" />
        </dateToPay>
    </basis>
</xsl:for-each></xsl:template>


那么,您希望元素数量为+吗?我想为所有发票创建一个for和一个for。抱歉,如果不清楚,我会编辑。我尝试使用链接和循环。它输出余额节点的次数与发票出现的次数相同,即使它只应该出现一次?使用链接和xslt,这会分别创建两个链接和xslt,但我只想要一个,我必须向您道歉,您所建议的是我目前正在使用的链接和xslt,但它不起作用。Hi SJBilly,添加了图像供您参考。测试图显示正确的结果OK,这从技术上回答了问题,所以我将标记它已回答,但它对我不起作用。帐户是发票的同级,而不是父级(再次道歉),但我将尝试在后处理器中解决此问题,在我循环遍历这两个基础后,删除这两个基础。非常感谢你的帮助和时间!