Bagaimana saya bisa memasukkan
Ke dalam stylesheet XSLT, saya terus mendapatkan kesalahan ini:
Kesalahan Parsing XML: entitas tidak terdefinisi
Pada dasarnya saya ingin karakter spasi yang tidak melanggar dalam Template XSLT.
Bagaimana saya bisa memasukkan
Ke dalam stylesheet XSLT, saya terus mendapatkan kesalahan ini:
Kesalahan Parsing XML: entitas tidak terdefinisi
Pada dasarnya saya ingin karakter spasi yang tidak melanggar dalam Template XSLT.
Jawaban:
Gunakan kode entitas  
sebagai gantinya.
adalah "referensi entitas karakter" HTML. Tidak ada entitas yang dinamai untuk ruang bebas-patah dalam XML, jadi Anda menggunakan kode  
.
Wikipedia menyertakan daftar entitas XML dan HTML , dan Anda dapat melihat bahwa hanya ada 5 "entitas yang ditentukan sebelumnya" dalam XML, tetapi HTML memiliki lebih dari 200 entitas. Saya juga akan mengarahkan ke Membuat spasi (& nbsp;) di XSL yang memiliki jawaban yang sangat bagus
Š
alih-alih  
, yang terakhir yang akan selalu menyelesaikan ke ruang non-breaking Unicode.
 
bekerja dengan sangat baik. Namun, itu akan menampilkan salah satu karakter aneh dalam pengkodean ANSI. <xsl:text>
bekerja paling baik untuk saya.
<xsl:text> </xsl:text>
Anda juga dapat melakukan ini:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
disable-output-escaping
, yang tidak diharuskan dan sudah tidak digunakan lagi di XSLT 2.0 dan lebih lagi di 3.0. Dalam versi ini, Anda dapat mencapai efek yang sama dengan xsl:character-map
dijamin untuk bekerja lintas-prosesor. Juga, ini menempatkan entitas bernama
dalam output, yang tidak harus sama dengan ruang non-breaking dan penerima harus mendeklarasikan entitas ini (dalam HTML biasanya implisit).
Gunakan ini
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
sunting: Downvoters mungkin harus memvalidasi bahwa ini berfungsi lebih dulu (ya, dan merupakan solusi paling umum untuk masalah tersebut.)
Anda mungkin ingin menambahkan definisi untuk entitas ini di awal file (di bawah deklarasi xml):
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
Anda juga dapat menambahkan lebih banyak entitas seperti Ntilde, Aacute, dll.
Selain jawaban victor hugo, dimungkinkan untuk mendapatkan semua referensi karakter yang dikenal legal dalam file XSLT, seperti ini:
<!DOCTYPE stylesheet [
<!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
"http://www.w3.org/2003/entities/2007/w3centities-f.ent">
%w3centities-f;
]>
...
<xsl:text>& –</xsl:text>
Ada juga perbedaan tertentu dalam hasil pendekatan ini dibandingkan dengan <xsl:text disable-output-escaping="yes">
satu. Yang terakhir akan menghasilkan string literal seperti
untuk semua jenis output, bahkan untuk <xsl:output method="text">
, dan ini mungkin berbeda dari apa yang Anda inginkan ... Sebaliknya, mendapatkan entitas yang ditentukan untuk template XSLT melalui <!DOCTYPE ... <!ENTITY ...
akan selalu menghasilkan output yang konsisten dengan xsl:output
pengaturan Anda .
Dan ketika menyertakan semua referensi karakter, mungkin bijaksana untuk menggunakan resolver entitas lokal untuk menjaga mesin XSLT dari mengambil definisi entitas karakter dari Internet. Pengguna JAXP atau Xalan-J eksplisit mungkin perlu patch untuk Xalan-J untuk menggunakan resolver dengan benar. Lihat blog saya XSLT, entitas, Java, Xalan ... untuk mengunduh patch dan komentar.
Saat Anda menggunakan yang berikut (tanpa disable-output-escaping
!) Anda akan mendapatkan satu ruang tanpa putus:
<xsl:text> </xsl:text>
disable-output-escaping
untuk ini
Lembar gaya XSLT harus berbentuk XML dengan baik. Karena " "
bukan salah satu dari lima entitas XML yang telah ditentukan , ia tidak dapat secara langsung dimasukkan dalam stylesheet. Jadi kembali ke solusi Anda " "
adalah pengganti sempurna yang " "
harus Anda gunakan.
Contoh:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
Anda juga bisa menggunakan:
<xsl:value-of select="'&nbsp'"/>
ingat amp setelah & & Anda akan mendapatkan pesan kesalahan
&nbsp;
(dengan asumsi Anda bermaksud titik koma ada di sana), yang akan dirender sebagai
, bukan sebagai `` (nb-space).
Saya mencoba untuk menampilkan batas pada sel kosong di tabel HTML. Trik lama saya menggunakan ruang non-breaking dalam sel kosong tidak bekerja dari xslt. Saya menggunakan line break dengan efek yang sama. Saya menyebutkan ini kalau-kalau alasan Anda mencoba menggunakan ruang non-breaking adalah untuk memberikan beberapa konten ke sel tabel 'kosong' untuk mengaktifkan batas sel.
<br/>
Coba gunakan
<xsl:text> </xsl:text>
Tetapi itu tergantung pada prosesor XSLT yang Anda gunakan: spesifikasi XSLT tidak memerlukan prosesor XSLT untuk mengubahnya menjadi "
".
Meskipun jawaban sudah diberikan oleh @brabster dan lainnya.
Saya pikir solusi yang lebih dapat digunakan kembali adalah:
<xsl:variable name="space"> </xsl:variable>
...
<xsl:value-of select="$space"/>