0

次のマップのソース 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) , &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 に置き換えたりせずに、必要なものを達成する方法を教えてください。

ここに画像の説明を入力

4

1 に答える 1

2

それぞれの最初のインスタンスのみをマップする必要があることがわかっている場合は、反復関数の代わりに、インデックスが1のインデックス関数を使用してください。

于 2012-11-19T17:30:58.583 に答える