2009-05-05 8 views
0

에 대한 재귀 적으로 호출되는 템플릿에 존재하는이 조건을 고려 : 내가 XSLT 2.0 프로세서 (색슨-B 9.1을 사용하고상태는 XSLT 1.0 스타일 시트 작동,하지만 XSLT 2.0 스타일 시트

<xsl:if test="$i &lt;= $count"> 

. 0.6). 이 조건은 XSLT 1.0 스타일 시트를 실행할 때만 작동하는 것 같습니다. 스타일 시트 버전을 2.0으로 설정하면 작업이 중단됩니다.

왜 그런가?

<xsl:template name="for.loop"> 
    <xsl:param name="i" /> 
    <xsl:param name="count" /> 

    <xsl:if test="$i &lt;= $count"> 
    ... 
    </xsl:if> 

    <!-- Repeat the loop by recursion --> 
    <xsl:if test="$i &lt;= $count"> 
     <xsl:call-template name="for.loop"> 
      <xsl:with-param name="i"> 
       <xsl:value-of select="$i + 1" /> 
      </xsl:with-param> 
      <xsl:with-param name="count"> 
       <xsl:value-of select="$count" /> 
      </xsl:with-param> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 

감사 :

여기에 전부입니다.

답변

1

여기 내 의의가 있습니다 : 어떤 데이터 형식이 $i$coun인지에 따라, 1.0보다 많은 데이터 형식을 지원하는 2.0에서 "미만"테스트가 실패 할 수 있습니다. 1.0에서 암시 적 변환은 옳은 일.

데이터를 비교하기 전에 올바른 유형으로 변환 해보세요. 예 : number()을 사용하십시오.

+0

그걸 수정했습니다. 제 2 회 테스트에서 number ($ count)를 사용했습니다. 테스트 중 하나만 변경해야하는 이유가 이상합니다. – Jonathan

+0

두 테스트 모두 변경이 필요하다고 생각합니다. 확인해 봤어? 조건을 부정하면 (test = "$ count > $ i") 알려줍니다. – Tomalak

+0

test = "$ count > = $ i"두 조건을 모두 바꿨습니다. 이제는 숫자 기능없이 작동합니다. 무슨 일이야? – Jonathan