부울 값을 만드는 방법은 무엇입니까?


86

나는 XSLT를 처음 접했고 다음 코드에서 내가 잘못 가고있는 곳을 찾을 수 없습니다.

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

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

거짓을 의미하는 경우 항상 참을 반환합니다. 왜?


3
제안 일 뿐이지 만 제목을 적절한 질문으로 작성하고 말하기를 피하면 더 나은 답변을 얻을 수 있습니다.
— Will Dean

답변:


168

다음에 정의 된 $ var 변수의 값 :

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

이다

   true()

이는 XPath에서 " false"가 값 false()의 생성자 인과 반대로 일반 문자열 이기 때문입니다.booleanfalse()

XPath의 두 가지 부울 값은 다음과 같습니다 (구성되어 있음에 유의하십시오!).

   true() 과 false()

모든 값을 부울로 변환하는 세부 사항은 XPath 사양에 설명되어 있습니다. :

" 부울 함수는 다음과 같이 인수를 부울로 변환합니다.

  • 숫자는 양수 또는 음수가 아니거나 NaN이 아닌 경우에만 참입니다.

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

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

  • 네 가지 기본 유형이 아닌 유형의 객체는 해당 유형에 종속 된 방식으로 부울로 변환됩니다. "

귀하의 경우 문자열 "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()"/>


@DimitreNovatchev 안녕하세요 Dimitre. 부울 값이 XSL 변환 파일에 하드 코딩 된 경우 이것이 해결책입니다. 문자열 비교를 포함하지 않는 변환중인 파일에서 오는 false및 true문자열에 대한 깔끔한 솔루션이 있습니까?
— Jagger

1
@ 재거, 이것은 다른 질문입니다. 이 질문은 " How to create a Boolean value "에 대한 정확한 답을 얻었습니다. " 특정 문자열을 부울 값으로 해석 (또는 구문 분석)하는 방법 "이라는 질문은 완전히 다른 질문입니다. 문자열 비교에 어떤 문제가 있는지 물어봐도 될까요?
— Dimitre Novatchev

17

사용중인 boolean () 함수는 실제로 작업을 수행하고 있습니다. 명시적인 참 및 거짓 값을 사용하려면 다음 함수를 사용해야합니다.

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

참고로 MSDN 문서에 따라 boolean ()은 다음을 반환합니다.

  • 인수가 음수 또는 양수이면 부울 값 true로 변환됩니다.
  • 인수가 0이거나 NaN 값이면 false로 변환됩니다.
  • 인수가 비어 있지 않은 노드 집합이면 true로 변환됩니다. 빈 노드 세트는 false로 변환됩니다.
  • 인수가 비어 있지 않은 문자열이면 true로 변환됩니다 . 빈 문자열은 false로 변환됩니다.
  • 인수가 네 가지 기본 유형이 아닌 유형의 객체 인 경우 해당 유형에 종속 된 방식으로 부울로 변환됩니다.

목록의 두 번째 항목은 중요한 항목이므로 더 눈에 띄도록 다시 형식을 지정해야합니다. "boolean ( '')"도 false를 생성합니다.
— Tomalak

2
@Tomalak, 내 대답을 참조하십시오. 좀 더 자세하고 진정한 출처 인 "MSDN"이 아닌 W3C XPath 사양을 인용합니다.
— Dimitre Novatchev

1
@Dimitre :이 점에서 MSDN이 W3C 사양에서 너무 많이 벗어났다고 생각하지 않습니다. :) 그러나 거기를 가리키는 것은 물론 더 정확합니다.
— Tomalak

5

아마도이 단계에서 조금 늦었지만 부울을 다루는 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>

이것이 누군가에게 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.