Jak utworzyć wartość logiczną?
Jestem zupełnie nowy w XSLT i nie mogę rozgryźć, gdzie idę źle z poniższym kodem.
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
Zawsze zwraca prawdę, gdy ma być fałszywa. Dlaczego?
3 answers
Wartość zmiennej $var zdefiniowanej w:
<xsl:variable name="var" select="boolean('false')"/>
Jest
true()
Dzieje się tak dlatego, że w XPath "false
" jest zwykłym ciągiem znaków, w przeciwieństwie do false()
, który jest konstruktorem dla boolean
wartości false()
Dwie wartości logiczne w XPath to (zauważ, że są skonstruowane!):
true()
oraz false()
Szczegóły konwersji dowolnej wartości na wartość logiczną są pisane outin XPath Spec .:
"The boolean funkcja konwertuje swój argument na wartość logiczną w następujący sposób:
-
Liczba jest prawdziwa wtedy i tylko wtedy, gdy nie jest ani dodatnim, ani ujemnym zerem nor nan
-
Node-set jest true wtedy i tylko wtedy, gdy jest niepustym
-
Ciąg jest prawdziwy wtedy i tylko wtedy, gdy jego długość jest niezerowa
Obiekt typu innego niż cztery typy podstawowe jest konwertowany na boolean w sposób zależny od tego typu "
W Twoim przypadku ciąg "false" nie jest liczbą 0 i ma dodatnią Długość, więc zastosowana jest reguła w 3. Bulle powyżej, dając true()
.
Dlatego, aby zdefiniować zmienną w XSLT 1.0, której wartość jest false()
, należy zapisać definicję w następujący sposób:
<xsl:variable name="vMyVar" select="false()"/>
Lub, jeśli nie do końca pamiętasz, zawsze możesz napisz:
<xsl:variable name="vMyVar" select="1 = 0"/>
(podaj Dowolne wyrażenie, które jest ewaluowane do false()
), a procesor XSLT wykona pracę za Ciebie.
W XSLT 2.0 zawsze lepiej jest jawnie określić typ zmiennej:
<xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-06 17:29:56
Funkcja boolean (), której używasz, rzeczywiście wykonuje swoją pracę. Do używania jawnych wartości true I false należy użyć następujących funkcji:
<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>
Dla twojej informacji, zgodnie z MSDN documentation, funkcja boolean () zwraca następujące wartości:
- jeśli argument jest liczbą ujemną lub dodatnią, jest on konwertowany na wartość logiczną true.
- jeśli argument ma wartość zero lub wartość NaN, jest on konwertowany na false.
- jeśli argument jest niepustym zestawem węzłów, to / align = "left" / Pusty zestaw węzłów jest konwertowany na false.
- jeśli argument jest niepustym łańcuchem znaków, jest on konwertowany na true. Pusty łańcuch jest konwertowany na false.
- jeśli argument jest obiektem typu innego niż cztery typy podstawowe, jest on konwertowany do logiki w sposób zależny od tego typu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-06 15:33:49
Być może trochę późno na tym etapie, ale imo radzenie sobie z booleanami nie jest warte wysiłku. Oto jak poradziłem sobie z booleanem (obowiązkowym) wracającym z 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>
Hope this helps someone
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-02 09:29:51