我正在做一些文件类型检测,并希望更稳健地处理 XML 检测。
我添加了对可选的初始 Unicode BOM(字节顺序标记)的支持,后跟<
8 位或 UTF-16 编码的字符。
(这只是一个初始测试。如果此测试通过,那么我会继续尝试将其解析为 XML,但除非它看起来像 XML,否则我不会这样做,因为它更占用资源。)
我查看了 XML 标准,但行话变得很认真,我不确定我是否正确遵循了所有语法规则,尤其是对于 XML 更深奥的特性。我没有在标准中看到任何关于它可以以什么字符开头的具体内容。
特别是,我不确定 XML 文件或流以空格开头是否合法<
文档实体必须始终以“<”开头,但如果没有 XML 声明,则可以在其前面加上空格。
外部解析实体不需要初始“<”。外部解析的实体通常不会自行解析,只有在从文档实体中的实体引用直接或间接引用时才会解析。
规范实际上并没有那么复杂。
很清楚,如果 XMLDecl 不存在,则文档可以以 Misc 开头,其中包括空格选项。但是,
XMLDecl
,doctypedecl
,element
,Comment
, 和PI
都以“<
”开头。