2012-11-19 129 views
0

在源以下地圖的XSD,InvTransTable和ToWarehouse元件是無界的。BizTalk映射,防止循環的for-each

我只想在每種情況下在第一次迭代映射值。我的問題是,由地圖生成的XSLT包含兩個迴路,如可以在下面可以看到:

<ns0:Record> 
     <xsl:for-each select="s1:InvTransTable"> 
      <xsl:variable name="var:v4" select="position()" /> 
      <xsl:for-each select="s1:ToWarehouse"> 
      <xsl:variable name="var:v5" select="position()" /> 
      <xsl:variable name="var:v6" select="userCSharp:LogicalEq(string($var:v5) , &quot;1&quot;)" /> 
      <xsl:variable name="var:v7" select="userCSharp:LogicalEq(string($var:v4) , &quot;1&quot;)" /> 
      <xsl:variable name="var:v8" select="userCSharp:LogicalAnd(string($var:v6) , string($var:v7))" /> 
      <xsl:variable name="var:v12" select="userCSharp:StringUpperCase(&quot;B&quot;)" /> 
      <xsl:variable name="var:v13" select="userCSharp:StringUpperCase(&quot;M&quot;)" /> 
      <xsl:variable name="var:v14" select="userCSharp:StringUpperCase(&quot;4&quot;)" /> 
      <ns0:Header> 
       <xsl:if test="string($var:v8)='true'"> 
       <xsl:variable name="var:v9" select="s1:EXDRefCustAccount/text()" /> 
       <ns0:AccountNo> 
        <xsl:value-of select="$var:v9" /> 
       </ns0:AccountNo> 
       </xsl:if> 
       <xsl:if test="string($var:v7)='true'"> 
       <xsl:variable name="var:v10" select="../s1:ShipDate/text()" /> 
       <ns0:DateExpected> 
        <xsl:value-of select="$var:v10" /> 
       </ns0:DateExpected> 
       </xsl:if> 

這導致創建的XML包含多個頭元素,這不是我想要的!

我試圖阻止這種通過量使用迭代(檢查值1)和條件functoid的,但是這並沒有奏效。任何人都可以請告訴我如何才能實現所需要的而不訴諸於腳本functoid或用XSLT替換地圖?

enter image description here

回答

2

如果你知道你只需要每一個映射的第一個實例,使用索引Functoid的索引爲1,而不是迭代functoid的。

+0

謝謝你。我正在複製同一個項目中的類似地圖。我現在意識到,雖然原始地圖的作者使用迭代functoid工作,但使用索引functoid會更容易。 –