I'm menghasilkan beberapa dokumen XML dan ketika datang ke alamat saya memiliki fragmen yang terlihat seperti ini:
<Address>15 Sample St
Example Bay
Some Country</Address>
XSLT yang saya punya untuk mengubah ini untuk XHTML memiliki beberapa funky rekursif template untuk mengkonversi karakter baris baru dalam string <br/> tags.
Ini semua bekerja dengan baik, tetapi itu dianggap "praktek buruk" untuk mengandalkan ganti baris dalam dokumen XML? Jika demikian, disarankan bahwa aku melakukan hal ini bukan?
<Address><Line>15 Sample St</Line>
<Line>Example Bay</Line>
<Line>Some Country</Line></Address>
Tampaknya seperti itu'a menjadi benar-benar canggung untuk membungkus setiap tempat di mana teks saya dapat beberapa baris dengan tag seperti itu..
It's umumnya dianggap praktek yang buruk untuk mengandalkan ganti baris, sejak itu's rapuh cara untuk membedakan data. Sementara kebanyakan XML prosesor akan melestarikan ruang kosong apapun yang anda masukkan ke dalam XML, it's tidak dijamin.
Masalah sebenarnya adalah bahwa sebagian besar aplikasi yang output XML ke dalam format yang mudah dibaca mempertimbangkan semua ruang kosong yang ada di XML dipertukarkan, dan mungkin runtuh mereka ganti baris ke dalam satu ruang. Yang's mengapa XSLT anda harus melompat melalui lingkaran untuk membuat data dengan benar. Menggunakan "br" tag akan sangat menyederhanakan mengubah.
Potensi masalah lain adalah bahwa jika anda membuka dokumen XML XML editor dan cantik-cetak ini, anda're kemungkinan untuk kehilangan orang-orang garis istirahat.
Jika anda tetap menggunakan linebreaks, pastikan tambahkan xml:space="melestarikan" atribut "alamat." (Anda dapat melakukan ini di DTD, jika anda're menggunakan salah satu.)
Beberapa bacaan yang disarankan
aplikasi XML sering tampak untuk mengambil sikap angkuh terhadap spasi karena aturan tentang tempat-tempat di dokumen XML di mana spasi doesn't peduli kadang-kadang memberikan aplikasi kendali bebas untuk menambahkan atau hapus spasi di tempat-tempat tertentu.
Bagaimana menggunakan atribut ini untuk menyimpan data, melainkan dari teks node:
<Address Street="15 Sample St" City="Example Bay" State="" Country="Some Country"/>
Aku tahu penggunaan atribut vs teks node yang sering diperdebatkan subjek, tapi saya've terjebak dengan atribut 95% dari waktu, dan belum't memiliki masalah karena itu.
Beberapa orang mengatakan bahwa CDATA blok akan memungkinkan anda untuk mempertahankan garis istirahat. Ini adalah salah. Bagian CDATA hanya akan membuat markup akan diproses sebagai data karakter, mereka akan tidak **** mengubah line break pengolahan.
<Address>15 Sample St
Example Bay
Some Country</Address>
adalah persis sama seperti
<Address><![CDATA[15 Sample St
Example Bay
Some Country]]></Address>
Satu-satunya perbedaan adalah cara yang berbeda Api laporan ini.
Saya pikir satu-satunya masalah adalah bahwa hal itu membuat XML sulit untuk dibaca. misalnya
<Something>
<Contains>
<An>
<Address>15 Sample St
Example Bay
Some Country</Address>
</An>
</Contains>
</Something>
Jika cukup XML isn't kekhawatiran, saya'd mungkin tidak khawatir tentang hal itu, sehingga selama itu's bekerja. Jika cukup XML adalah kekhawatiran, saya'd mengkonversi eksplisit baris baru menjadi <br />
kategori atau \n
sebelum embedding mereka dalam XML.
Hal ini tergantung pada bagaimana anda're membaca dan menulis XML.
Jika XML yang dihasilkan secara otomatis - jika baris atau eksplisit \n bendera yang diurai ke
- kemudian ada's tidak perlu khawatir. Masukan anda mungkin doesn't memiliki XML lain di dalamnya sehingga's hanya cleaner untuk tidak main-main dengan XML sama sekali.
Jika kategori sedang dikerjakan dengan manual, it's masih cleaner untuk hanya memiliki satu baris, jika anda bertanya kepada saya.
Pengecualian adalah jika anda're menggunakan DOM untuk mendapatkan beberapa struktur dari XML. Dalam hal ini garis istirahat yang jelas-jelas jahat karena mereka don't mewakili hirarki dengan benar. Kedengarannya seperti hirarki adalah tidak relevan untuk aplikasi anda, meskipun, jadi garis istirahat suara yang cukup.
Jika XML hanya terlihat buruk (terutama ketika dibuat secara otomatis), Tidy dapat membantu, meskipun bekerja dengan baik dengan HTML dibandingkan dengan XML.
XML spec memiliki sesuatu untuk dikatakan tentang spasi dan linefeeds dan kereta kembali khususnya. Jadi jika anda membatasi diri anda untuk benar linefeeds (x0A) anda harus Ok. Namun, banyak alat editing yang akan memformat XML untuk "presentasi yang lebih baik" dan mungkin menyingkirkan sintaks khusus. Yang lebih kuat dan lebih bersih pendekatan dari "< line>< / line>" ide akan hanya menggunakan nama dan cantumkan XHTML konten, misalnya:
<Address xmlns="http://www.w3.org/1999/xhtml">15 Sample St<br />Example Bay<br />Some Country</Address>
Tidak perlu untuk menemukan kembali roda ketika datang untuk standar kosakata.
Ini mungkin sedikit menipu, contoh, karena alamat ini sedikit non-normal dalam kasus ini. Hal ini wajar trade-off, namun karena bidang alamat yang sulit untuk menormalkan. Jika anda membuat garis istirahat membawa informasi penting, anda're un-normalisasi dan pembuatan kantor pos menafsirkan makna dari garis istirahat.
Saya akan mengatakan bahwa biasanya ini bukan masalah besar, tetapi dalam kasus ini saya pikir Baris tag adalah yang paling benar karena secara eksplisit menunjukkan bahwa anda don't benar-benar menafsirkan apa garis mungkin berarti dalam budaya yang berbeda. (Ingat bahwa kebanyakan bentuk untuk memasukkan alamat kode pos dll, dan alamat baris 1 dan 2.)
Kecanggungan yang memiliki tag line dilengkapi dengan normal XML, dan telah banyak diperdebatkan di coding horror. http://www.codinghorror.com/blog/archives/001139.html
Saya don't melihat apa yang's salah dengan <Line>
kategori.
Rupanya, visualisasi data ini penting untuk anda, yang cukup penting untuk menjaga data anda (melalui jeda baris dalam contoh pertama). Baik-baik saja. Kemudian benar-benar menjaga itu, don't bergantung pada "sihir" untuk membuat itu untuk anda. Menyimpan setiap bit data anda'll perlu di kemudian hari dan dapat't menyimpulkan sempurna dari menyelamatkan sebagian dari data, tetap bahkan jika itu's visualisasi data (jeda baris dan format lainnya). Anda pengguna (end user dari pengembang lain) mengambil waktu untuk format data yang disukainya - baik katakan padanya (API doc / teks di dekat input) yang anda don't berniat untuk tetap seperti itu, atau hanya menyimpannya.
Apa yang anda benar-benar harus lakukan adalah mengkonversi XML ke format yang melindungi white-space.
Jadi, daripada berusaha untuk menggantikan \n dengan <br /> anda harus membungkus seluruh blok a <pre>
Dengan cara itu, anda alamat fungsional yang diawetkan (apakah anda termasuk garis istirahat atau tidak) dan XSTL dapat memilih apakah untuk melestarikan putih-ruang dalam hasil.
Jika anda perlu anda ganti baris diawetkan, menggunakan CDATA blok, seperti tweakt said
Jika tidak hati-hati. Sebagian besar waktu, linebreaks akan dipertahankan oleh perangkat lunak XML, tapi kadang-kadang mereka tidak't, dan anda benar-benar don't ingin menjadi bergantung pada hal-hal yang hanya bekerja dengan kebetulan