Saya mengurai file XML menggunakan Sax Parser of Xerces.
Apakah deklarasi XML <?xml version="1.0" encoding="UTF-8"?>
diperlukan?
xml
xml-declaration
eros
sumber
sumber
Jawaban:
Dalam XML 1.0, Deklarasi XML bersifat opsional . Lihat bagian 2.8 dari Rekomendasi XML 1.0 , di mana dikatakan "harus" digunakan - yang berarti disarankan, tetapi tidak wajib. Namun, dalam XML 1.1, deklarasi tersebut bersifat wajib . Lihat bagian 2.8 dari Rekomendasi XML 1.1 , di mana dikatakan "HARUS" digunakan. Ia bahkan melanjutkan dengan menyatakan bahwa jika deklarasi tidak ada, yang secara otomatis menyiratkan bahwa dokumen tersebut adalah dokumen XML 1.0.
Perhatikan bahwa dalam Deklarasi XML ,
encoding
danstandalone
keduanya opsional. Hanya yangversion
wajib. Juga, ini bukan atribut, jadi jika ada, harus dalam urutan seperti itu:,version
diikuti oleh apa sajaencoding
, diikuti oleh apa sajastandalone
.Jika Anda tidak menentukan pengkodean dengan cara ini, pengurai XML mencoba menebak pengkodean apa yang digunakan. Rekomendasi XML 1.0 menjelaskan satu kemungkinan cara pengkodean karakter dapat dideteksi secara otomatis . Dalam praktiknya, ini tidak menjadi masalah jika input dikodekan sebagai UTF-8, UTF-16 atau US-ASCII. Deteksi otomatis tidak berfungsi saat menemukan pengkodean 8-bit yang menggunakan karakter di luar rentang US-ASCII (misalnya ISO 8859-1) - hindari membuat ini jika Anda bisa.
The
standalone
menunjukkan apakah dokumen XML dapat benar diproses tanpa DTD atau tidak. Orang jarang menggunakannya. Hari-hari ini, adalah buruk untuk mendesain format XML yang kehilangan informasi tanpa DTD-nya.Memperbarui:
Kesalahan "kesalahan prolog / pengkodean utf-8 tidak valid" menunjukkan bahwa data aktual yang ditemukan parser di dalam file tidak cocok dengan pengkodean yang disebutkan dalam deklarasi XML. Atau dalam beberapa kasus, data di dalam file tidak cocok dengan encoding yang terdeteksi otomatis.
Karena file Anda berisi byte-order-mark (BOM), itu harus dalam encoding UTF-16. Saya menduga bahwa pernyataan Anda mengatakan
<?xml version="1.0" encoding="UTF-8"?>
yang jelas tidak benar ketika file telah diubah menjadi UTF-16 oleh NotePad. Solusi sederhananya adalah dengan menghapusencoding
dan hanya mengatakan<?xml version="1.0"?>
. Anda juga dapat mengeditnya untuk mengatakanencoding="UTF-16"
tetapi itu akan salah untuk file asli (yang tidak ada di UTF-16) atau jika file entah bagaimana diubah kembali ke UTF-8 atau pengkodean lainnya.Jangan repot-repot mencoba menghapus BOM - itu bukan penyebab masalahnya. Menggunakan NotePad atau WordPad untuk mengedit XML adalah masalah sebenarnya!
sumber
Deklarasi Xml bersifat opsional sehingga xml Anda terbentuk dengan baik tanpanya. Namun disarankan untuk menggunakannya agar asumsi yang salah tidak dibuat oleh parser, khususnya tentang encoding yang digunakan.
sumber
Ini hanya diperlukan jika Anda tidak menggunakan nilai default untuk
version
danencoding
(yang Anda gunakan dalam contoh itu).sumber