XSLT'de tamamen yeniyim ve aşağıdaki kodla nerede yanlış yaptığımı çözemiyorum.
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
Yanlış olması gerektiği zaman her zaman doğruya dönüyor. Neden?
XSLT'de tamamen yeniyim ve aşağıdaki kodla nerede yanlış yaptığımı çözemiyorum.
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
Yanlış olması gerektiği zaman her zaman doğruya dönüyor. Neden?
Yanıtlar:
$ Var değişkeninin değeri şurada tanımlandığı gibidir:
<xsl:variable name="var" select="boolean('false')"/>
dır-dir
true()
Bunun nedeni , değerin yapıcısı olan XPath'de " false
" sıradan bir dizedir.false()
boolean
false()
XPath'deki iki boole değeri (bunların oluşturulduklarına dikkat edin!):
true()
ve false()
Herhangi bir değeri mantıksal değere dönüştürmenin ayrıntıları, XPath Spesifikasyonunda açıklanmıştır. :
" Boole işlevi, argümanını aşağıdaki gibi bir boolean'a dönüştürür:
bir sayı, ancak ve ancak ne pozitif ne de negatif sıfır veya NaN ise doğrudur
bir düğüm kümesi, ancak ve ancak boş değilse doğrudur
bir dizge, ancak ve ancak uzunluğu sıfır değilse doğrudur
dört temel türden farklı bir türdeki bir nesne, bu türe bağlı bir şekilde bir mantıksal değere dönüştürülür "
Sizin durumunuzda "false" dizesi 0 sayısı değildir ve pozitif bir uzunluğa sahiptir, bu nedenle yukarıdaki 3. madde işaretindeki kural uygulanır ve sonuç verir true()
.
Bu nedenle, XSLT 1.0'da değeri olan bir değişkeni tanımlamak false()
için tanımın aşağıdaki gibi yazılması gerekir:
<xsl:variable name="vMyVar" select="false()"/>
veya bunu tam olarak hatırlamıyorsanız, her zaman yazabilirsiniz:
<xsl:variable name="vMyVar" select="1 = 0"/>
(olarak değerlendirilen herhangi bir ifadeyi belirtin false()
) ve XSLT işlemci işi sizin yerinize yapacaktır.
XSLT 2.0'da değişkenin türünü açıkça belirtmek her zaman daha iyidir :
<xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>
false
ve true
dize karSIlaStIrmasInI içermeyen dönüşüm altında olmanın dosyadan gelen dizeleri?
Kullandığınız boolean () işlevi gerçekten de işini yapıyor. Açıkça doğru ve yanlış değerleri kullanmak için aşağıdaki işlevleri kullanmalısınız:
<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>
Bilginize, MSDN belgelerine göre boolean () aşağıdakileri döndürür:
Belki bu aşamada biraz geç olabilir ama booleanlarla uğraşmak çabaya değmez. DB'den dönen bir boole (Zorunlu) ile nasıl başa çıktığımı burada:
<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>
Umarım bu birine yardımcı olur