문제

나는 XSLT를 완전히 처음 접했고 다음 코드로 잘못된 곳을 해결할 수 없습니다.

<xsl:variable name="var" select="boolean('false')"/>

<xsl:if test="$var'">variable is true</xsl:if>

거짓이 될 때 항상 사실이 되돌아갑니다. 왜요?

도움이 되었습니까?

해결책

정의 된 $ var 변수의 값 :

   <xsl:variable name="var" select="boolean('false')"/>

~이다

   true()

이것은 xpath에 있기 때문입니다.false"와는 달리 일반적인 문자열입니다 false(), 이것은 The의 생성자입니다 booleanfalse()

XPath의 두 부울 값은입니다 (그들은 건설 되었음에 유의하십시오!) : :

   true() 그리고 false()

부울로 모든 값을 변환하는 세부 사항은 xpath 사양.:

"그만큼 부울 기능은 다음과 같이 인수를 부울로 변환합니다.

  • 숫자는 긍정적이거나 음의 0 또는 Nan이 아닌 경우에만 사실입니다.

  • 노드 세트는 비어 있지 않은 경우에만 사실입니다.

  • 길이가 0이 아닌 경우에만 문자열이 사실입니다.

  • 네 가지 기본 유형 이외의 유형의 객체는 해당 유형에 의존하는 방식으로 부울로 변환됩니다. "

귀하의 경우 문자열 "False"는 숫자 0이 아니며 길이가 양의 길이를 가지므로 위의 세 번째 총알의 규칙이 적용되어 true().

따라서 xslt 1.0에서 변수를 정의하려면 값이 false(), 정의를 다음과 같이 작성해야합니다.

   <xsl:variable name="vMyVar" select="false()"/>

또는 정확히 기억하지 못하면 항상 쓸 수 있습니다.

   <xsl:variable name="vMyVar" select="1 = 0"/>

(평가하는 모든 표현을 지정하십시오 false()) 및 XSLT 프로세서가 귀하를 위해 작업을 수행합니다.

XSLT 2.0에서는 항상 유형을 명시 적으로 지정하는 것이 좋습니다. 변수의 :

   <xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>

다른 팁

사용중인 부울 () 기능은 실제로 작업을 수행하는 것입니다. 명시 적 참과 거짓 값을 사용하려면 다음 기능을 사용해야합니다.

<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>

그냥 fyi MSDN 문서, boolean ()은 다음을 반환합니다.

  • 인수가 음수 또는 양수 인 경우 부울 값으로 변환됩니다.
  • 인수가 0이거나 NAN 값이면 False로 변환됩니다.
  • 인수가 비어 있지 않은 노드 세트 인 경우 True로 변환됩니다. 빈 노드 세트가 False로 변환됩니다.
  • 인수가 비어 있지 않은 문자열이라면 True로 변환됩니다.. 빈 문자열이 False로 변환됩니다.
  • 인수가 네 가지 기본 유형 이외의 유형의 객체 인 경우 해당 유형에 의존하는 방식으로 부울로 변환됩니다.

이 단계에서 조금 늦었지만 부울을 다루는 IMO는 노력의 가치가 없습니다. 그녀는 내가 DB에서 돌아 오는 부울 (필수)을 어떻게 다루 었는지 :

<xsl:variable name="vTrue" select="true()"/>                     
    <xsl:choose>
      <xsl:when test="string(Mandatory) = string($vTrue)">
        <xsl:text>Mandatory</xsl:text>
      </xsl:when>
      <xsl:otherwise>           
      </xsl:otherwise>
    </xsl:choose>

이것이 누군가를 돕기를 바랍니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top