Без вашите действителни данни или източник ще ни бъде трудно да диагностицираме какво не е наред. Мога обаче да направя няколко предложения:
- Unicode NUL (0x00) е незаконен във всички версии на XML и проверяващите парсери трябва да отхвърлят вход, който го съдържа.
- Въпреки горното; реалният невалидиран XML може да съдържа всякакъв вид боклук, неправилно оформени байтове, които можете да си представите.
- XML 1.1 позволява контролни знаци с нулева ширина и неотпечатани (с изключение на NUL), така че не можете да разгледате XML 1.1 файл в текстов редактор и да разберете какви знаци съдържа.
Предвид това, което написахте, подозирам, че каквото и да преобразува данните от базата данни в XML, е счупено; той разпространява не-XML знаци.
Създайте някои записи в базата данни с не-XML знаци (NUL, DEL, контролни знаци и др.) и стартирайте своя XML конвертор върху тях. Изведете XML във файл и го разгледайте в шестнадесетичен редактор. Ако това съдържа не-XML знаци, вашият конвертор е повреден. Поправете го или, ако не можете, създайте препроцесор, който отхвърля изход с такива знаци.
Ако изходът на конвертора изглежда добре, проблемът е във вашия XML потребител; вмъква някъде знаци, които не са XML. Ще трябва да разделите процеса на потребление на отделни стъпки, да изследвате изхода на всяка стъпка и да стесните какво въвежда лошите знаци.
Проверете кодирането на файла (за UTF-16)
Актуализация:Току-що се натъкнах на пример за това! Това, което се случваше, е, че производителят кодира XML като UTF16, а потребителят очакваше UTF8. Тъй като UTF16 използва 0x00 като старши байт за всички ASCII символи, а UTF8 не, потребителят виждаше всеки втори байт като NUL. В моя случай можех да променя кодирането, но предложих всички XML полезни данни да започват с BOM.