Bez vašich skutečných dat nebo zdroje pro nás bude těžké diagnostikovat, co je špatně. Mohu však učinit několik návrhů:
- Unicode NUL (0x00) je nezákonné ve všech verzích XML a ověřující analyzátory musí odmítnout vstup, který jej obsahuje.
- Navzdory výše uvedenému; neověřené XML v reálném světě může obsahovat jakýkoli druh odpadu, který si lze představit ve špatném tvaru.
- XML 1.1 umožňuje nulovou šířku a netisknutelné řídicí znaky (kromě NUL), takže se nemůžete podívat na soubor XML 1.1 v textovém editoru a zjistit, jaké znaky obsahuje.
Vzhledem k tomu, co jste napsal, mám podezření, že cokoliv převádí data databáze do XML, je nefunkční; šíří jiné než XML znaky.
Vytvořte některé položky databáze s neXML znaky (NUL, DEL, řídicí znaky atd.) a spusťte na nich svůj XML konvertor. Výstup XML do souboru a podívat se na něj v hex editoru. Pokud toto obsahuje jiné než XML znaky, váš převaděč je nefunkční. Opravte to, nebo pokud nemůžete, vytvořte preprocesor, který odmítne výstup s takovými znaky.
Pokud výstup převodníku vypadá dobře, problém je ve vašem spotřebiteli XML; někde se vkládají jiné než XML znaky. Budete muset rozdělit proces spotřeby do samostatných kroků, prozkoumat výstup v každém kroku a zúžit to, co představuje špatné postavy.
Zkontrolujte kódování souboru (pro UTF-16)
Aktualizace:Právě jsem narazil na takový příklad! Došlo k tomu, že výrobce kódoval XML jako UTF16 a spotřebitel očekával UTF8. Protože UTF16 používá 0x00 jako horní bajt pro všechny znaky ASCII a UTF8 nikoli, spotřebitel viděl každý druhý bajt jako NUL. V mém případě bych mohl změnit kódování, ale navrhl jsem, aby všechny datové části XML začínaly kusovníkem.