Estou fazendo algumas coisas de detecção de tipo de arquivo e queria lidar com a detecção de XML de forma mais robusta.
Eu adicionei suporte para um Unicode BOM inicial opcional (Byte Order Mark) seguido por um <
caractere em codificação de 8 bits ou UTF-16.
(Este é apenas um teste inicial. Se este teste for aprovado, tento analisá-lo como XML, mas não faço isso a menos que pareça XML, pois é mais pesado em recursos.)
Eu olhei para o padrão XML, mas o jargão estava ficando muito difícil e não tenho certeza se segui todas as regras gramaticais corretamente, especialmente para os recursos mais esotéricos do XML. Eu não vi nada específico no padrão sobre com quais personagens ele pode começar.
Em particular, não tenho certeza se é ou não legal que arquivos ou fluxos XML comecem com espaço em branco antes do primeiro<
Uma entidade de documento deve sempre começar com "<", mas se não houver declaração XML, isso pode ser precedido por um espaço em branco.
Uma entidade externa analisada não requer um "<" inicial. As entidades externas analisadas normalmente não são analisadas por conta própria, apenas quando referenciadas direta ou indiretamente de uma referência de entidade em uma entidade de documento.
A especificação não é realmente tão complicada.
deixa bem claro que, se o XMLDecl estiver ausente, o documento pode começar com Misc, que inclui a opção de espaço em branco. No entanto,
XMLDecl
,doctypedecl
,element
,Comment
ePI
todos começam com "<
".