Kami mengalami situasi baru-baru ini di mana hanya dalam satu dari banyak XSL berhenti bekerja dengan teknik ini, dan mulai menunjukkan karakter yang aneh. Namun, jika saya menggunakan teknik CDATA WaterSoul itu berfungsi.
@BrianReindel, itu mungkin berarti bahwa Anda menggunakan referensi entitas numerik yang salah, yaitu Šalih-alih  , yang terakhir yang akan selalu menyelesaikan ke ruang non-breaking Unicode.
<xsl: text> & # 160; </ xsl: text> itu memisahkan dua bidang
Manash Ranjan Dakua
1
Tautannya sudah busuk.
GSerg
37
 bekerja dengan sangat baik. Namun, itu akan menampilkan salah satu karakter aneh dalam pengkodean ANSI. <xsl:text>bekerja paling baik untuk saya.
Menggunakan jawaban yang diterima saya berakhir dengan garis pemisah ruang dalam output XML saya (setidaknya seperti apa itu di editor XML VS2010). Dengan menggunakan jawaban ini saya mendapatkan tepat 1 ruang saja.
Mathijs Flietstra
1
@ Matthijs, ini adalah ruang, bukan ruang non-breaking, yang tidak sama. Jika VS menunjukkannya secara tidak benar, periksa enkode Anda (VS benar-benar mampu menunjukkan ini dengan benar dan itu harus enkode independen, jadi semakin besar kemungkinan Anda melakukan sesuatu yang salah).
Ini akan berfungsi jika prosesor mendukungdisable-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-mapdijamin 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).
Tidak yakin, tapi saya sudah menguji pendekatan saya dan itu berhasil, jadi saya tidak yakin apa downvote itu untuk :(
jagprinderdeep
2
Juga, jawaban yang diterima tidak akan valid untuk semua parser sesuai dengan halaman yang ditautkan; just a heads up
jagprinderdeep
1
Saya telah memberikan alasan untuk downvote saya sebelumnya, tetapi jika saya untuk downvote jawaban ini , maka alasannya adalah - itu menjawab pertanyaan yang salah. OP dengan jelas bertanya bagaimana memasukkan ruang yang tidak bisa dipecahkan, menggunakan xslt dan Anda menjawab bagaimana menempatkan urutan ampersand-nbsp-semicolon. Dan bertengkar karena downvotes juga tidak biasa. Tapi serius, pernahkah Anda mengatakan itu tentang CDATA?
Michael Krelin - hacker
1
Oke, jagprinderdeep, saya mencabut downvote saya, tetapi sebagai imbalannya silakan kunjungi saya begitu saya mencapai rumah sakit jiwa. (perhatikan bahwa saya tidak mengembalikan Anda karena alasan baru). Tetapi mengerti bahwa Anda menjawab pertanyaan yang salah. Saya pikir itulah alasan di balik downvote lainnya.
Michael Krelin - hacker
8
Saya juga downvoted karena Anda tidak dapat menjamin pihak penerima akan mendeklarasikan & nbsp ;. Jika Anda bekerja dengan xslt + html, maka ya, ini adalah cara untuk melakukannya, meskipun peretasan. Tetapi, jika Anda menggunakan xslt untuk menghasilkan xml lain, maka itu hanya akan meledak pada Anda.
Doug
14
Anda mungkin ingin menambahkan definisi untuk entitas ini di awal file (di bawah deklarasi xml):
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:outputpengaturan 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.
Perhatikan bahwa baru-baru ini, W3 mulai memblokir terlalu banyak permintaan untuk tautan tersebut dan yang serupa jika berasal dari proses otomatis. Tempatkan file itu secara lokal atau di server Anda dan sesuaikan URL sesuai dan Anda akan baik-baik saja. Selain itu, +1, dan solusi terbaik untuk menggunakan entitas bernama HTML.
Abel
Catatan yang bagus, dan ada juga alasan lain untuk memiliki salinan file lokal dengan definisi entitas, karena jika tidak proses XSLT kemungkinan akan gagal jika koneksi internet tidak tersedia. Di dunia Java tidak perlu meretas URL, karena dimungkinkan untuk mengatur EntityResolver , dan Apache XML Commons Resolver mungkin merupakan kandidat yang baik. Platform pemrograman lain kemungkinan memiliki teknik yang sama juga ...
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.
Ini akan menampilkan &nbsp;(dengan asumsi Anda bermaksud titik koma ada di sana), yang akan dirender sebagai , bukan sebagai `` (nb-space).
Abel
0
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.
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
sumber
Š
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.sumber
Anda juga dapat melakukan ini:
sumber
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 denganxsl: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
sunting: Downvoters mungkin harus memvalidasi bahwa ini berfungsi lebih dulu (ya, dan merupakan solusi paling umum untuk masalah tersebut.)
sumber
Anda mungkin ingin menambahkan definisi untuk entitas ini di awal file (di bawah deklarasi xml):
Anda juga dapat menambahkan lebih banyak entitas seperti Ntilde, Aacute, dll.
sumber
Selain jawaban victor hugo, dimungkinkan untuk mendapatkan semua referensi karakter yang dikenal legal dalam file XSLT, seperti ini:
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 denganxsl: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.
sumber
Saat Anda menggunakan yang berikut (tanpa
disable-output-escaping
!) Anda akan mendapatkan satu ruang tanpa putus:<xsl:text> </xsl:text>
sumber
disable-output-escaping
untuk iniLembar 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:
sumber
Anda juga bisa menggunakan:
ingat amp setelah & & Anda akan mendapatkan pesan kesalahan
sumber
&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.
sumber
Coba gunakan
Tetapi itu tergantung pada prosesor XSLT yang Anda gunakan: spesifikasi XSLT tidak memerlukan prosesor XSLT untuk mengubahnya menjadi "
".sumber
Meskipun jawaban sudah diberikan oleh @brabster dan lainnya.
Saya pikir solusi yang lebih dapat digunakan kembali adalah:
sumber