Estou analisando um arquivo XML usando o Sax Parser do Xerces.
A declaração XML é <?xml version="1.0" encoding="UTF-8"?>
necessária?
Estou analisando um arquivo XML usando o Sax Parser do Xerces.
A declaração XML é <?xml version="1.0" encoding="UTF-8"?>
necessária?
Respostas:
No XML 1.0, a Declaração XML é opcional . Consulte a seção 2.8 da Recomendação do XML 1.0 , onde diz que "deve" ser usado - o que significa que é recomendado, mas não obrigatório. No XML 1.1, no entanto, a declaração é obrigatória . Consulte a seção 2.8 da Recomendação XML 1.1 , onde diz "DEVE" ser usado. Ele ainda afirma que, se a declaração estiver ausente, isso implica automaticamente que o documento é um documento XML 1.0.
Observe que em uma declaração XML, o encoding
e standalone
são opcionais. Somente o version
é obrigatório. Além disso, esses não são atributos; portanto, se estiverem presentes, devem estar nessa ordem version
:, seguido por qualquer encoding
, seguido por qualquer standalone
.
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
Se você não especificar a codificação dessa maneira, os analisadores XML tentarão adivinhar qual codificação está sendo usada. A Recomendação XML 1.0 descreve uma maneira possível de a codificação de caracteres ser detectada automaticamente . Na prática, isso não é muito problemático se a entrada for codificada como UTF-8, UTF-16 ou US-ASCII. A detecção automática não funciona quando encontra codificações de 8 bits que usam caracteres fora da faixa US-ASCII (por exemplo, ISO 8859-1) - evite criá-las, se puder.
o standalone
indica se o documento XML pode ser processado corretamente sem a DTD ou não. As pessoas raramente usam. Hoje em dia, é ruim projetar um formato XML que esteja faltando informações sem a DTD.
Atualizar:
Um erro "erro de prólogo / codificação utf-8 inválida" indica que os dados reais que o analisador encontrou dentro do arquivo não corresponderam à codificação que a declaração XML diz que é. Ou, em alguns casos, os dados dentro do arquivo não correspondem à codificação detectada automaticamente.
Como seu arquivo contém uma BOM (marca de ordem de bytes), ele deve estar na codificação UTF-16. Eu suspeito que sua declaração diz <?xml version="1.0" encoding="UTF-8"?>
que está obviamente incorreta quando o arquivo foi alterado para UTF-16 pelo Bloco de Notas. A solução simples é remover o encoding
e simplesmente dizer <?xml version="1.0"?>
. Você também pode editá-lo para dizer, encoding="UTF-16"
mas isso seria errado para o arquivo original (que não estava no UTF-16) ou se o arquivo de alguma forma for alterado novamente para UTF-8 ou alguma outra codificação.
Não se preocupe em tentar remover a lista técnica - essa não é a causa do problema. Usar o Bloco de notas ou o WordPad para editar XML é o verdadeiro problema!
A declaração XML é opcional, portanto seu XML é bem formado sem ela. Mas é recomendável usá-lo para que não sejam feitas suposições erradas pelos analisadores, especificamente sobre a codificação usada.