Saya mengurai file XML menggunakan Sax Parser of Xerces.
Apakah deklarasi XML <?xml version="1.0" encoding="UTF-8"?>
diperlukan?
Saya mengurai file XML menggunakan Sax Parser of Xerces.
Apakah deklarasi XML <?xml version="1.0" encoding="UTF-8"?>
diperlukan?
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
dan standalone
keduanya opsional. Hanya yang version
wajib. Juga, ini bukan atribut, jadi jika ada, harus dalam urutan seperti itu:, version
diikuti oleh apa saja encoding
, diikuti oleh apa saja standalone
.
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
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 menghapus encoding
dan hanya mengatakan <?xml version="1.0"?>
. Anda juga dapat mengeditnya untuk mengatakan encoding="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!
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.