次のマップのソース XSD では、InvTransTable 要素と ToWarehouse 要素は無制限です。
いずれの場合も、最初の反復でのみ値をマップしたいと考えています。私の問題は、次の図に示すように、マップによって生成された XSLT に 2 つのループが含まれていることです。
<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) , "1")" />
<xsl:variable name="var:v7" select="userCSharp:LogicalEq(string($var:v4) , "1")" />
<xsl:variable name="var:v8" select="userCSharp:LogicalAnd(string($var:v6) , string($var:v7))" />
<xsl:variable name="var:v12" select="userCSharp:StringUpperCase("B")" />
<xsl:variable name="var:v13" select="userCSharp:StringUpperCase("M")" />
<xsl:variable name="var:v14" select="userCSharp:StringUpperCase("4")" />
<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 に置き換えたりせずに、必要なものを達成する方法を教えてください。