每个 XML 文件/流/等都必须以“

每个 XML 文件/流/等都必须以“

我正在做一些文件类型检测的工作,并希望更加强大地处理 XML 检测。

我添加了对可选初始 Unicode BOM(字节顺序标记)的支持,后跟<8 位或 UTF-16 编码的字符。

(这只是初步测试。如果测试通过,我会继续尝试将其解析为 XML,但除非它看起来像 XML,否则我不会这样做,因为它需要更多的资源。)

我查看了 XML 标准,但术语变得相当复杂,我不确定我是否正确遵循了所有语法规则,尤其是 XML 中比较深奥的功能。不过,我没有在标准中看到任何关于它可以以哪些字符开头的具体内容。

特别是,我不确定 XML 文件或流是否合法以空格开头<

答案1

文档实体必须始终以“<”开头,但如果没有 XML 声明,那么其前面可以加空格。

外部解析实体不需要以“<”开头。外部解析实体通常不会单独解析,只有当从文档实体中的实体引用直接或间接引用时才会解析。

事实上,规格并没有那么复杂。

[1]     document       ::=      prolog element Misc*

[22]    prolog     ::=      XMLDecl? Misc* (doctypedecl Misc*)?
[23]    XMLDecl    ::=      '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

[27]    Misc       ::=      Comment | PI | S

[3]     S      ::=      (#x20 | #x9 | #xD | #xA)+

非常清楚地表明,如果 XMLDecl 不存在,则文档可以以 Misc 开头,其中包括空格选项。但是XMLDecl,、、、和doctypedecl都以“ ”开头。elementCommentPI<

相关内容