Mensagem de erro quando um documento XML contém caracteres ASCII Low-Order

Este artigo ajuda você a resolve o problema que ocorre quando um documento XML contém Low-Order caracteres ASCII.

Versão original do produto: Microsoft XML
Número original do KB: 315580

Sintomas

Quando você tenta usar as versões 3.0 ou posteriores do analisador MSXML para analisar documentos XML que contêm determinados caracteres ASCII não imprimíveis de baixa ordem (ou seja, caracteres abaixo do ASCII 32), você pode receber a seguinte mensagem de erro:

Um caractere Inválido foi encontrado no conteúdo de texto.

Motivo

As versões 3.0 e posteriores do analisador MSXML impõem estritamente os intervalos de caracteres XML válidos definidos pela especificação de idioma XML do World Wide Web Consortium (W3C). Documentos XML analisados usando versões 3.0 ou posteriores do MSXML não podem conter caracteres que estejam fora dos intervalos de caracteres XML válidos definidos. Os caracteres ASCII não imprimíveis de baixa ordem nos intervalos listados na seção Mais Informações não são caracteres XML válidos. Um documento XML que contém instâncias desses caracteres não está em conformidade com as especificações do W3C e não pode ser analisado com êxito com as versões 3.0 e posteriores do MSXML.

Resolução

Para resolve esse problema, remova instâncias dos caracteres ASCII não imprimíveis de baixa ordem ou substitua os caracteres por um caractere válido alternativo, como o caractere de espaço (ASCII 32, hex #x20). Essa solução torna o documento XML compatível com as especificações do W3C. No entanto, a remoção ou substituição de instâncias desses caracteres pode afetar outros aplicativos que usam os dados e para os quais os caracteres são significativos. Esse impacto adicional só pode ser identificado por meio de testes e precisará ser resolvido implementando uma correção ou solução alternativa apropriada para uma situação específica.

Mais informações

As versões 2.6 e anteriores do analisador MSXML permitem que documentos XML contenham caracteres ASCII não imprimíveis de baixa ordem que estão fora dos intervalos de caracteres XML válidos do W3C. No entanto, o design das versões 3.0 e posterior do analisador MSXML foi alterado para impor estritamente os intervalos de caracteres XML válidos definidos na especificação de idioma XML W3C. Essa alteração de design é necessária para poder identificar documentos XML não conformes.

A seguir estão os caracteres XML válidos e os intervalos de caracteres (valores hex) conforme definido pelas especificações da linguagem XML W3C 1.0:

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

A seguir estão os intervalos de caracteres para caracteres ASCII não imprimíveis de baixa ordem que são rejeitados pelas versões MSXML 3.0 e posteriores:

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

Essa alteração de design pode afetar os seguintes usuários e aplicativos:

  • Usuários do Explorer da Internet: usuários que têm usado a Internet Explorer versões 5.5 e anteriores (e que não instalaram o MSXML 3.0 no modo Substituir) para navegar e exibir documentos XML que contêm uma ou mais instâncias dos caracteres ASCII não imprimíveis especificados encontram a mensagem de erro depois de atualizar para a Internet Explorer 6.0 porque a Internet Explorer O 6.0 instala o MSXML 3.0 SP2 no modo Substituir e o usa para analisar documentos XML.
  • Usuários do MDAC e do ADO: desenvolvedores e usuários que carregam documentos XML persistentes pelo ADO que contêm uma ou mais instâncias dos caracteres ASCII não imprimíveis de baixa ordem especificados em objetos ADO Recordset encontram a mensagem de erro após a atualização para MDAC 2.7 porque o MDAC 2.7 instala o MSXML 3.0 SP2, que é a versão do analisador MSXML que o objeto ADO 2.7 Recordset usa.
  • Aplicativos que usam o MSXML Document Object Model (DOM): aplicativos que usam versão independente PROGIDs para instanciar objetos MSXML DOM que são usados para analisar documentos XML geram o erro especificado quando MSXML 3.0 ou um de seus pacotes de serviço é instalado no modo Substituir ou quando o código é modificado para usar a versão MSXML 3.0 ou 4.0 específica PROGIDs.

Referências

Para obter mais informações sobre outras causas conhecidas e soluções alternativas para a mensagem de erro especificada na seção Sintomas, consulte: