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

나는 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()의 생성자 인과 반대로 일반 문자열 이기 때문입니다.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()"/>


답변

사용중인 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로 변환됩니다.
  • 인수가 네 가지 기본 유형이 아닌 유형의 객체 인 경우 해당 유형에 종속 된 방식으로 부울로 변환됩니다.


답변

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

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


답변