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, могут быть включены в документ в виде ссылки на символ, например &#x1B;, (Очевидно, что в разделе CDATA это бесполезно, но в любом случае разделы CDATA не очень полезны).

Если вам нужно включить произвольные управляющие символы в XML, вам, как правило, потребуется использовать схему кодирования для конкретного приложения, например base64.

Из какого-то веб-сервиса, который мне нужно вызвать из какого-то приложения, я получаю много &#x0; символы, загрязняющие XML. Чтобы решить эту проблему, я просто загружаю XML сначала в переменную WideString, а затем заменяю недопустимый текст с помощью StringReplace() перед добавлением XML в объект интерфейса IXMLDocument.
Это грязно, я знаю. Но если вам все еще нужно обработать какой-нибудь XML-файл, содержащий недопустимые символы, это просто самый простой вариант.

Другие вопросы по тегам