2012-11-19 6 views
0

다음 맵의 소스 XSD에서 InvTransTable 및 ToWarehouse 요소는 제한되지 않습니다.BizTalk Map, For Each Looping 방지

각각의 경우 첫 번째 반복에 대해서만 값을 매핑하려고합니다. 지도에 의해 생성 된 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 결과!

Iteration (값 1 확인) 및 조건부 Functoids 사용을 방지하기 위해 노력했지만이 방법은 효과가 없습니다. 누구든지 스크립팅 펑 토이 드에 의지하거나 맵을 XSLT로 대체하지 않고 필요한 것을 얻을 수있는 방법을 조언 해 줄 수 있습니까?

enter image description here

답변

2

당신은 대신 반복 펑 토이의, 각각의 첫 번째 인스턴스를 매핑 인덱스 1의 인덱스 펑 토이 사용할 필요가 알고 있다면.

+0

고마워요. 나는 같은 프로젝트에서 비슷한지도를 복사하고 있었다. 이제 원래 맵 작성자가 반복 펑 토이 드를 사용하여 작업 할 수있게되었지만 인덱스 펑 토이 드를 사용하는 것이 더 쉬웠을 것입니다. –