0

在以下地图的源 XSD 中,InvTransTable 和 ToWarehouse 元素是无界的。

在每种情况下,我只想为第一次迭代映射值。我的问题是,映射生成的 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 来防止这种情况发生,但这并没有奏效。谁能告诉我如何在不使用脚本函数或用 XSLT 替换地图的情况下实现所需的功能?

在此处输入图像描述

4

1 回答 1

2

如果您知道只需要映射每个实例的第一个实例,请使用索引为 1 的 Index functoid,而不是 Iteration functoid。

于 2012-11-19T17:30:58.583 回答