XML 能否以“<”以外的任何内容开头?

Kil*_*zur 3 xml string w3c file

XML 能否以<字符以外的任何内容开头?

当我尝试定义如何区分包含 XML 的字符串和包含 XML 路径的字符串时,这是我的一个随机想法。

我相信答案是否定的,但我希望确定这一点。

kjh*_*hes 6

只有一个<或一个空白字符才能开始格式良好的XML 文档。

W3C XML 推荐标准包括一个 EBNF,它明确定义了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)+
Run Code Online (Sandbox Code Playgroud)

根据这些规则,XML 文档可以以空白字符或<来自以下任一结构的字符开头:

  • XML声明
  • 评论
  • PI
  • 文件类型声明
  • 元素

XML 文档可以不以任何其他字符开头。

笔记:

  1. 这些规则的含义是,如果 XML 文档包含 XML 声明,则它必须出现在顶部(否则您可能会收到一条 有点神秘的错误消息)。因此,对于具有 XML 声明的 XML 文档,第一个字符必须是 a<并且不能是空格。
  2. BOM可能出现在 XML 文档实体的开头,以指示所使用的字符编码的字节顺序。这两个字节通常不被认为是XML文档本身的一部分,而是支持XML文档的物理结构的存储单元。BOM 与 XML 声明一起协助 XML 处理器进行字符编码检测。[感谢JonHanna 对 BOM 提及的建议]

  • 直接回答问题:第一个*非S*字符必须是`&lt;`。正确的? (2认同)
  • @Shnugo:正确。 (2认同)
  • 我想补充一点,任何在较低级别检查某些内容可能是 XML 的内容也应该查找 BOM。严格来说,BOM 不是文本的一部分,因此上述内容都是正确的,但较低级别的代码需要确保它也处理 BOM。 (2认同)