在同一个文档格式良好的XML中有两个XML声明吗?
<?xml version="1.0" encoding="UTF-8"?>
<a>
<?xml version="1.0" encoding="UTF-8"?>
<b>
hello
</b>
</a>
我相信不是,但我无法找到支持我的消息来源。
来自Extensible Markup Language (XML) 1.0
定义:XML文档应该以XML声明开头 指定正在使用的XML版本。
讨厌的词&#34;应该&#34;在那儿。理想情况下,文档以XML声明开头。它没有说明在文档中有另一个。
文档类型声明必须出现在第一个元素之前 文件。
这很接近,但它并没有谈论XML声明本身,即使它应该在它之前。
答案 0 :(得分:8)
在格式良好的XML中只允许使用一个 XML声明,如果在任何地方,必须位于顶部。
在Well-Formed XML Documents的XML Recommendation部分中查看document
的定义:
[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'))
...通常可能在其他地方发生,但是由于PITarget
的定义和本声明而排除了第二个XML声明:
保留目标名称“XML”,“xml”等 本规范的此版本或未来版本中的标准化。