Delphi, IXMLDOMDocument2, загрузка не выполнена из-за недопустимого символа
Использование Delphi 2009 и IXMLDOMDocument2
Я получаю сообщение об ошибке "Недопустимый символ в текстовом содержимом" при загрузке XML в IXMLDOMDocument2. Символ 1B (в шестнадцатеричном формате) и присутствует в разделе CDATA. Microsoft XML Viewer (IE) загружает файл просто отлично. XML выглядит так...
<data><child><![CDATA[-- ]]></child></data>
ПРИМЕЧАНИЕ. Я пытаюсь вставить XML, но специальный символ удален. В разделе CDATA есть символ 1B, следующий за "-" в моем XML-файле.
Я попытался добавить в начало XML и другие кодировки, и у меня ничего не работает. Что-нибудь можно сделать, чтобы загрузить этот файл?
Спасибо майкл
2 ответа
Символ U+001B недопустим в XML вместе с большинством остальных управляющих символов ASCII. Он не правильно сформирован, и если средство просмотра XML от Microsoft не жалуется, оно не анализирует его в соответствии с правилами XML. Ай!
Только в XML 1.1 все, кроме U+0000, могут быть включены в документ в виде ссылки на символ, например 
, (Очевидно, что в разделе CDATA это бесполезно, но в любом случае разделы CDATA не очень полезны).
Если вам нужно включить произвольные управляющие символы в XML, вам, как правило, потребуется использовать схему кодирования для конкретного приложения, например base64.
Из какого-то веб-сервиса, который мне нужно вызвать из какого-то приложения, я получаю много �
символы, загрязняющие XML. Чтобы решить эту проблему, я просто загружаю XML сначала в переменную WideString, а затем заменяю недопустимый текст с помощью StringReplace() перед добавлением XML в объект интерфейса IXMLDocument.
Это грязно, я знаю. Но если вам все еще нужно обработать какой-нибудь XML-файл, содержащий недопустимые символы, это просто самый простой вариант.