Tanpa data atau sumber Anda yang sebenarnya, akan sulit bagi kami untuk mendiagnosis apa yang salah. Namun, saya dapat memberikan beberapa saran:
- Unicode NUL (0x00) ilegal di semua versi XML dan parser yang memvalidasi harus menolak masukan yang berisi itu.
- Meskipun di atas; XML yang tidak divalidasi di dunia nyata dapat berisi segala jenis byte sampah yang tidak sesuai.
- XML 1.1 memungkinkan karakter kontrol lebar-nol dan non-cetak (kecuali NUL), sehingga Anda tidak dapat melihat file XML 1.1 dalam editor teks dan memberi tahu karakter apa yang ada di dalamnya.
Mengingat apa yang Anda tulis, saya menduga apa pun yang mengubah data database ke XML rusak; itu menyebarkan karakter non-XML.
Buat beberapa entri database dengan karakter non-XML (NUL, DEL, karakter kontrol, dkk.) dan jalankan konverter XML Anda di dalamnya. Keluarkan XML ke file dan lihat di editor hex. Jika ini berisi karakter non-XML, konverter Anda rusak. Perbaiki atau, jika Anda tidak bisa, buat praprosesor yang menolak output dengan karakter seperti itu.
Jika output konverter terlihat bagus, masalahnya ada pada konsumen XML Anda; itu memasukkan karakter non-XML di suatu tempat. Anda harus memecah proses konsumsi Anda menjadi langkah-langkah terpisah, memeriksa keluaran pada setiap langkah, dan mempersempit apa yang memperkenalkan karakter buruk.
Periksa penyandian file (untuk UTF-16)
Pembaruan:Saya baru saja mengalami contoh ini sendiri! Apa yang terjadi adalah bahwa produsen mengkodekan XML sebagai UTF16 dan konsumen mengharapkan UTF8. Karena UTF16 menggunakan 0x00 sebagai byte tinggi untuk semua karakter ASCII dan UTF8 tidak, konsumen melihat setiap byte kedua sebagai NUL. Dalam kasus saya, saya dapat mengubah penyandian, tetapi menyarankan semua muatan XML dimulai dengan BOM.