나는 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()
의 생성자 인과 반대로 일반 문자열 이기 때문입니다.boolean
false()
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>
이것이 누군가에게 도움이되기를 바랍니다.