MSXML2.SAXXMLReader.6.0 не анализирует & # x5; - PullRequest
0 голосов
/ 20 мая 2009

Я пишу некоторые XML из C #, используя XmlTextWriter .NET Framework. Это работает хорошо. Некоторые из записываемых мной строк содержат символьное значение 5 (обратите внимание, я не имею в виду символ «5», но имею в виду значение ascii 5).

Теперь я понимаю из спецификации xml, что этот символ недопустим в xml. Тем не менее, мне все равно, если это незаконно, я хочу, чтобы это было в моем документе XML (не соответствует). Это сделано для того, чтобы я мог написать строку, которая может содержать некоторые двоичные данные в документе.

Хорошо, поэтому System.Xml.XmlTextWriter хорошо запишет эти недопустимые символы xml и закодирует их в xml как "&#5x;". Но затем я хочу прочитать их в приложении 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.

1 Ответ

2 голосов
/ 20 мая 2009

Нет, невозможно проанализировать управляющие символы в XML.

Если быть точным, это сделало бы ваши документы чем-то отличным от XML-документов.

Это жесткая часть спецификации. Если вы хотите разобрать недопустимые символы, вам придется написать свой собственный НЕ СОВЕРШЕННЫЙ парсер.

Согласно:

http://lists.xml.org/archives/xml-dev/199804/msg00502.html

...