在以下地图的源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) , "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包含多个标题元素,这不是我想要的!
我试图通过使用Iteration(检查值为1)和条件functoid来防止这种情况,但这没有用。谁能告诉我如何在不使用脚本功能或用XSLT替换地图的情况下实现所需的功能?
答案 0 :(得分:2)
如果您知道只需映射每个实例的第一个实例,请使用索引为1的Index functoid,而不是Iteration functoid。