Saya benar-benar baru mengenal XSLT dan tidak tahu di mana kesalahan saya dengan kode berikut.
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
Itu selalu mengembalikan true ketika itu dimaksudkan untuk menjadi salah. Mengapa?
Jawaban:
Nilai variabel $ var seperti yang didefinisikan di:
<xsl:variable name="var" select="boolean('false')"/>
adalah
true()
Ini karena di XPath "
false
" adalah string biasa, bukanfalse()
, yang merupakan konstruktor untukboolean
nilaifalse()
Dua nilai boolean di XPath adalah (perhatikan bahwa keduanya dibuat!):
true()
danfalse()
Detail untuk mengonversi nilai apa pun ke boolean dijelaskan dalam Spesifikasi XPath .:
"Fungsi boolean mengubah argumennya menjadi boolean sebagai berikut:
suatu bilangan benar jika dan hanya jika tidak positif atau negatif nol atau NaN
set node benar jika dan hanya jika tidak kosong
sebuah string bernilai true jika dan hanya jika panjangnya bukan nol
objek dengan tipe selain dari empat tipe dasar diubah menjadi boolean dengan cara yang bergantung pada tipe itu "
Dalam kasus Anda, string "false" bukanlah angka 0 dan memiliki panjang positif, sehingga aturan dalam poin ke-3 di atas diterapkan, menghasilkan
true()
.Oleh karena itu, untuk mendefinisikan variabel dalam XSLT 1.0, yang nilainya adalah
false()
, seseorang perlu menulis definisi sebagai berikut:<xsl:variable name="vMyVar" select="false()"/>
atau, jika Anda tidak terlalu mengingatnya, Anda selalu dapat menulis:
<xsl:variable name="vMyVar" select="1 = 0"/>
(tentukan ekspresi apa pun yang mengevaluasi
false()
) dan prosesor XSLT akan melakukan pekerjaan untuk Anda.Di XSLT 2.0, selalu lebih baik untuk secara eksplisit menentukan jenis variabel:
<xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>
sumber
false
dan yangtrue
berasal dari file yang sedang dalam transformasi yang tidak melibatkan perbandingan string?Fungsi boolean () yang Anda gunakan memang melakukan tugasnya. Untuk menggunakan nilai benar dan salah eksplisit Anda harus menggunakan fungsi berikut:
<xsl:variable name="var_false" select="false()"/> <xsl:variable name="var_true" select="true()"/>
Untuk diketahui saja, sesuai dokumentasi MSDN , boolean () mengembalikan yang berikut:
sumber
Mungkin agak terlambat pada tahap ini, tetapi berurusan dengan boolean tidak sebanding dengan usahanya. Inilah cara saya menangani boolean (Wajib) yang kembali dari 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>
Semoga ini bisa membantu seseorang
sumber