【问题标题】:OK to put comments before the XML declaration?可以在 XML 声明之前添加注释吗?
【发布时间】:2010-11-14 20:26:30
【问题描述】:

可以在 XML 文件中将 cmets 放在 XML 声明之前吗?

<!--
Is this bad to do?
-->
<?xml version="1.0" encoding="utf-8"?>
<someElement />

【问题讨论】:

  • 你试过了,发生了什么?
  • 嘿!不要因为我先问后实验的坏习惯而骂我... ^_^
  • 实验只会让你说“好吧,它可以在 my 计算机上运行”,这没什么帮助。有些 XML 处理器可能允许,有些则不允许。但是,如果您遵循规范,那么所有 XML 处理器(现在和未来)将更有可能处理您的文件。
  • 无论如何,猜想很明显这是不允许的 - 出于任何原因 :D 并且如果您的解析器将其标记为正确(这不好但可能),无论如何实验并没有真正的帮助。 ...

标签: xml xml-declaration


【解决方案1】:

不,不行。

Appendix F of the XML spec 说:

因为每个 XML 实体不 伴随外部编码 信息,而不是 UTF-8 或 UTF-16 编码必须以 XML 开头 编码声明,其中 第一个字符必须是 '

啊,但是,你说 F 部分是非规范性的。

好吧,section 2.1 给出了格式良好的 XML 文档的产生式,因此:

[1]     document       ::=       prolog element Misc*

...在section 2.8 中,我们得到了“prolog”的产生式:

[22]    prolog     ::=       XMLDecl? Misc* (doctypedecl Misc*)?
[23]    XMLDecl    ::=      '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

所以,你可以省略

(顺便说一下,“Misc”是 cmets 所属的类别)。

【讨论】:

  • 美丽的答案,伟大的研究正是我所需要的。 +1。
【解决方案2】:

根据this page,这是非法的:

向您的 XML 代码添加引用 cmets 时,请记住它们不能出现在文档的最顶部。在 XML 中,只能先声明 XML:

<?xml version="1.0"?>

【讨论】:

    【解决方案3】:

    XML 声明指定文档编码,这对于 cmets 和对于结构化 XML 一样重要。因此,应先声明。如果许多 XML 阅读器能够处理这个问题,我不会感到惊讶,但这是个坏主意。

    【讨论】:

    • 好吧,我同意你的看法。事实上,解析器必须知道如何读取文档,因为他也无法读取编码。因此,仅应禁止将多字节字符放入此注释中...
    【解决方案4】:

    不,这不符合 XML 标准,但是 cmets 很好。

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 2015-07-15
      • 2021-09-16
      • 2021-12-07
      • 1970-01-01
      • 2019-03-23
      • 2015-03-21
      • 2015-08-11
      • 2015-07-03
      相关资源
      最近更新 更多