在文档格式良好的XML中有多个XML声明吗?

Mik*_*ike 5 xml xml-declaration

在同一个文档格式良好的XML中有两个XML声明吗?

<?xml version="1.0" encoding="UTF-8"?>
<a>
 <?xml version="1.0" encoding="UTF-8"?>
 <b>
  hello
 </b>
</a>
Run Code Online (Sandbox Code Playgroud)

我相信它不是,但我找不到支持我的消息来源.

来自可扩展标记语言(XML)1.0

定义:XML文档应该以XML声明开头,该声明指定所使用的XML的版本.

那个讨厌的词"应该"就在那里.理想情况下,文档以XML声明开头.它没有说明在文档中有另一个.

文档类型声明必须出现在文档中的第一个元素之前.

这很接近,但它没有谈论XML声明本身,即使它应该在它之前.

kjh*_*hes 8

在格式良好的XML中允许一个 XML声明,并且它必须位于顶部(如果有的话).

必须在顶部

请参阅XML建议书documentWell-Formed XML Documents部分中的定义:

[1]     document ::= prolog element Misc*
Run Code Online (Sandbox Code Playgroud)

然后检查prolog:

[22]    prolog   ::= XMLDecl? Misc* (doctypedecl Misc*)?
Run Code Online (Sandbox Code Playgroud)

然后XMLDecl:

[23]    XMLDecl  ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
Run Code Online (Sandbox Code Playgroud)

因此,我们看到EBNF允许在文档顶部进行XML声明.

只有一个

处理说明 ......

[16]    PI       ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17]    PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))
Run Code Online (Sandbox Code Playgroud)

...通常可能在其他地方发生,但是凭借定义PITarget和本声明排除了第二个XML声明:

目标名称"XML","xml"等保留用于本规范的此版本或未来版本中的标准化.