6

在同一个文档中是否有两个 XML 声明格式正确的 XML?

<?xml version="1.0" encoding="UTF-8"?>
<a>
 <?xml version="1.0" encoding="UTF-8"?>
 <b>
  hello
 </b>
</a>

我相信不是,但是我找不到支持我的来​​源。

可扩展标记语言 (XML) 1.0

定义:XML 文档应该以一个 XML 声明开始,该声明指定正在使用的 XML 版本。

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

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

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

4

1 回答 1

9

在格式良好的 XML 中只允许有一个XML 声明,并且它必须在任何位置的顶部。

必须在顶部

请参阅XML RecommendationdocumentWell-Formed XML Documents部分中的定义:

[1]     document ::= prolog element Misc*

然后检查prolog

[22]    prolog   ::= XMLDecl? Misc* (doctypedecl Misc*)?

然后XMLDecl

[23]    XMLDecl  ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

因此,我们看到EBNF允许在文档顶部使用 XML 声明。

只有一个

处理指令...

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

...通常可能会出现在其他地方,但是由于以下语句的定义,排除了第二个 XML 声明PITarget

目标名称“XML”、“xml”等保留用于本规范的这个或未来版本的标准化。

于 2013-11-27T19:56:44.217 回答