每個 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都以「」element開頭CommentPI<

相關內容