Сообщение об ошибке, когда XML-документ содержит символы Low-Order ASCII

Эта статья поможет устранить проблему, которая возникает, когда XML-документ содержит Low-Order символы ASCII.

Исходная версия продукта: Microsoft XML
Оригинальный номер базы знаний: 315580

Симптомы

При попытке использовать средство синтаксического анализа MSXML версии 3.0 или более поздней для синтаксического анализа XML-документов, содержащих некоторые непечатаемые символы ASCII (то есть символы ниже ASCII 32), может появиться следующее сообщение об ошибке:

В текстовом содержимом найден недопустимый символ.

Причина

В версиях 3.0 и более поздних версий средства синтаксического анализа MSXML строго применяются допустимые диапазоны символов XML, определенные спецификацией xml консорциума W3C. XML-документы, которые анализируются с помощью MSXML версии 3.0 или более поздней, не могут содержать символы, которые выходят за пределы определенных допустимых диапазонов символов XML. Непечатаемые символы ASCII низкого порядка в диапазонах, перечисленных в разделе Дополнительные сведения , не являются допустимыми символами XML. XML-документ, содержащий экземпляры этих символов, не соответствует спецификациям W3C и не может быть успешно проанализирован в msXML версии 3.0 и более поздних.

Решение

Чтобы устранить эту проблему, удалите экземпляры символов ASCII низкого порядка, не печатаемых, или замените символы альтернативным допустимым символом, например символом пробела (ASCII 32, шестнадцатеричный #x20). Это решение обеспечивает соответствие XML-документа спецификациям W3C. Однако удаление или замена экземпляров этих символов может повлиять на другие приложения, использующие данные и для которых символы имеют важное значение. Такое дополнительное влияние можно определить только путем тестирования, и его необходимо будет устранить путем реализации исправления или обходного решения, подходящего для конкретной ситуации.

Дополнительная информация

В версиях 2.6 и более ранних версий средства синтаксического анализа MSXML XML-документы могут содержать непечатаемые символы ASCII низкого порядка, которые выходят за допустимые диапазоны символов XML W3C. Однако конструкция средства синтаксического анализа MSXML версий 3.0 и более поздних версий была изменена для строгого применения допустимых диапазонов символов XML, определенных в спецификации языка XML W3C. Это изменение структуры требуется, чтобы иметь возможность идентифицировать несоответствующие XML-документы.

Ниже приведены допустимые XML-символы и диапазоны символов (шестнадцатеричные значения), определенные спецификациями языка XML W3C 1.0:

#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

Ниже приведены диапазоны символов для символов ASCII низкого порядка, которые отклоняются MSXML версии 3.0 и более поздних.

#x0 - #x8 (ASCII 0 - 8)
#xB - #xC (ASCII 11 - 12)
#xE - #x1F (ASCII 14 - 31)

Это изменение структуры может повлиять на следующих пользователей и приложения:

  • Пользователи Обозреватель Интернета: пользователи, которые использовали Интернет Обозреватель версий 5.5 и более ранних версий (и не устанавливали MSXML 3.0 в режиме замены) для просмотра и просмотра XML-документов, содержащих один или несколько экземпляров указанных непечатаемых символов ASCII низкого порядка, возникает сообщение об ошибке после обновления до Internet Обозреватель 6.0, так как Интернет Обозреватель 6.0 устанавливает MSXML 3.0 с пакетом обновления 2 (SP2) в режиме замены и использует его для анализа XML-документов.
  • Пользователи MDAC и ADO. Разработчики и пользователи, которые загружают xml-документы, сохраняемые ADO, которые содержат один или несколько экземпляров указанных непечатаемых символов ASCII в объекты ADO Recordset , сталкиваются с сообщением об ошибке после обновления до MDAC 2.7, так как MDAC 2.7 устанавливает MSXML 3.0 с пакетом обновления 2 (SP2), который является версией средства синтаксического анализа MSXML, используемой объектом ADO 2.7 Recordset .
  • Приложения, использующие модель MSXML Document Object Model (DOM). Приложения, использующие независимые от PROGIDs версии объекты DOM MSXML, которые используются для анализа XML-документов, создают указанную ошибку, если MSXML 3.0 или один из его пакетов обновления установлен в режиме замены или когда код изменяется для использования msXML 3.0 или 4.0 версии PROGIDs.

Ссылки

Дополнительные сведения о других известных причинах и обходных решениях сообщения об ошибке, указанного в разделе Симптомы, см. в следующих статьях: