Delphi, IXMLDOMDocument2, загрузка не выполнена из-за недопустимого символа - PullRequest
3 голосов
/ 28 октября 2010

Использование Delphi 2009 и IXMLDOMDocument2

При загрузке XML в IXMLDOMDocument2 я получаю сообщение об ошибке «Недопустимый символ в текстовом содержимом». Символ 1B (в шестнадцатеричном формате) и присутствует в разделе CDATA. Microsoft XML Viewer (IE) загружает файл просто отлично. XML выглядит как ...

<data><child><![CDATA[-- ]]></child></data>

ПРИМЕЧАНИЕ. Я пытаюсь вставить XML, но специальный символ удален. В разделе CDATA в моем XML-файле есть символ 1B, следующий за "-".

Я пытался добавить в начало XML и другие кодировки, и у меня ничего не работает. Что-нибудь можно сделать, чтобы загрузить этот файл?

Спасибо, Michael

Ответы [ 2 ]

5 голосов
/ 28 октября 2010

Символ U + 001B недопустим в XML, вместе с большинством остальных управляющих символов ASCII.Он не правильно сформирован, и если средство просмотра XML от Microsoft не жалуется, оно не анализирует его в соответствии с правилами XML.Tsk!

В XML 1.1 только все, кроме U + 0000, могут быть включены в документ в виде ссылки на символ, например &#x1B;.(Очевидно, что в разделе CDATA это бесполезно, но в любом случае разделы CDATA на самом деле не очень полезны.)

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

0 голосов
/ 29 октября 2010

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

...