부울 가치를 만드는 방법?
문제
나는 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의 생성자입니다 boolean
값 false()
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>
이것이 누군가를 돕기를 바랍니다