XML 文件的第一个字符必须是什么?

What must the first character of an XML file be?

具体来说,有没有办法为 XML 文件编写 shebang?

我正在处理一些包含启动信息的 XML 文件。 (Roslaunch 文件,如果重要的话)。我想直接调用该文件并让 bash 启动它。但是,对于XML,以#!开头是语法错误。有没有办法用 shebang 写一个 XML 文件?

XML 文件中的第一个字符 必须 < 或空格。格式良好的 XML 文档可能没有其他字符开头,包括 #.

根据 Extensible Markup Language (XML) 1.0 (Fifth Edition) XML EBNF for Well-Formed XML Documents

[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)+
[16] PI       ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[15] Comment  ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
[28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? 
                     ('[' intSubset ']' S?)? '>'
[39] element  ::= EmptyElemTag | STag content ETag
[44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
[40] STag     ::= '<' Name (S Attribute)* S? '>'

document 作品及其组成部分可以明显看出,XML 文档必须以以下任一开头:

  • a <(通过 XMLDeclCommentPIdoctypedeclelement
  • 一个空白字符(前提是没有XMLDecl)。

使用 bash,shebang 不需要以 #! 开头。一个巧妙的技巧是使用脚本用于注释的任何内容并将其定义为无操作函数,然后在该函数后跟一个分号,然后 解释器名称。

这不适用于 XML 脚本,因为重定向不能是标识符。