Я пишу некоторые XML из C #, используя XmlTextWriter .NET Framework. Это работает хорошо. Некоторые из записываемых мной строк содержат символьное значение 5 (обратите внимание, я не имею в виду символ «5», но имею в виду значение ascii 5).
Теперь я понимаю из спецификации xml, что этот символ недопустим в xml. Тем не менее, мне все равно, если это незаконно, я хочу, чтобы это было в моем документе XML (не соответствует). Это сделано для того, чтобы я мог написать строку, которая может содержать некоторые двоичные данные в документе.
Хорошо, поэтому System.Xml.XmlTextWriter хорошо запишет эти недопустимые символы xml и закодирует их в xml как "x;"
. Но затем я хочу прочитать их в приложении C ++ с помощью MSXML2.SAXXMLReader.6.0. Этот синтаксический анализатор вызывает fatalError, когда встречается с одним из этих символов.
Я попытался изменить некоторые свойства парсера, чтобы он заработал. Насколько я понимаю, IE использовал этот синтаксический анализатор для себя, и я могу загрузить нелегальный XML с помощью IE. Итак, как IE удается разобрать его, когда я не могу.
Я что-то упустил? Использует ли IE другой парсер? Есть ли способ заставить парсер MSXML2.SAXXMLReader.6.0 работать? Нужно ли мне использовать другой парсер (если да, можете ли вы порекомендовать тот, у которого есть исходный код, чтобы я мог его исправить, если он не выполняет то, что я хочу)?
В синтаксическом анализаторе .Net можно установить свойство, позволяющее анализировать эти недопустимые символы. Я думаю, что я ищу эквивалент, который я могу использовать из C ++ с парсером SAX.
http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.checkcharacters.aspx
Большое спасибо,
-Скотт
ПРИМЕЧАНИЕ Я не верю, что раздел CDATA позволил бы закодировать этот символ. Посмотреть здесь:
http://msdn.microsoft.com/en-us/library/ms256076(VS.85).aspx
и, даже если это так. Я не хочу использовать разделы CDATA, я хочу использовать символ в значении атрибута. Я также понимаю, что могу кодировать его с помощью base64, но я тоже не хочу этого делать ... Я хочу нарушить закон, я хочу иметь возможность анализировать нелегальный XML.