为什么XML不允许嵌套注释

时间:2012-09-28 13:53:38

标签: xml

是否有任何特殊原因(除了它会使解析更难)XML不允许嵌套注释,例如

<!--
  <!-- this is the foo element -->
  <foo>bar</foo>
-->

4 个答案:

答案 0 :(得分:3)

完全可以允许嵌套注释,而无需更改语法。 XML的设计者选择不这样做,因为他们非常关注SGML兼容性:它允许XML文档不是有效的SGML文档。

答案 1 :(得分:2)

因为<! >是标记声明的语法,--是注释开始和结束的语法。

您无法嵌套注释,因为启动注释的语法与关闭注释的语法相同。

答案 2 :(得分:2)

据推测,出于同样的原因,你无法嵌套标签:

<tag1 <tag2>foo</tag2>>  <!-- This won't work. -->

注释实际上只是一种标记,相同的规则适用于任何其他标记的注释。

更新:Quentin正确地指出评论实际上是不是标签。 It's a different thing altogether. 的真实之处在于,注释遵循与标记相同的分隔符 - 内容 - 分隔符模式。将注释规则(15)与空标记规则(44)和开始标记规则(40,41)进行比较,并将其与元素规则(39)进行对比。元素可以嵌套(43),但元素是(返回39)start_tag-content-end_tag组合,其中内容部分可以是元素。同样,评论的作用类似于单个标记,而不像元素。

现在,所有这些都解释了 评论无法嵌套,但为什么以这种方式设计。我对XML的历史知之甚少,不知道其设计师心中的含义,但XML是更为通用的SGML的“应用程序”。它在HTML引入后也得到了很好的发展,其目的部分是为了解决HTML中的一些缺陷。 SGML和HTML share the same syntax for comments,通过查看XML继承了相同的语法,显而易见。那么,人们必须想象,XML注释的工作方式主要是因为它们是从它的前辈继承而来的:在XML开发甚至开始之前就做出了决定。

答案 3 :(得分:1)

开始评论标记会注明它看到的所有内容(包括更多开放的评论标记),直到它到达第一个结束评论标记。之后,评论结束,任何剩余的结束评论标记都将无法识别。与HTML相同。