XML注释和“ - ”

时间:2012-05-31 22:26:46

标签: xml comments

<!-- here is some comment --
                            ^
                            |
                    what can be here apart from '>'?

XML似乎不喜欢评论中的' - '。我在某处读到' - '在<! ... >内部切换了一些模式,但<!-- -- -- -->(偶数-- s)似乎也是无效的。如果它是一个历史性的特征,它的“专业”部分是什么? (“contra”部分无法在评论中加--

仅通过' - &gt;'使评论处理复杂化的原因是什么评论结束并允许' - '在里面?

5 个答案:

答案 0 :(得分:42)

来自标准文件:

http://www.w3.org/TR/REC-xml/#sec-comments

  

[定义:注释可能出现在其他文档之外的任何位置   标记;此外,它们可能出现在文档类型中   在语法允许的地方声明。他们不属于   文件的字符数据; XML处理器可以但不必成功   应用程序可以检索注释文本。 :用于   compatibility,字符串“ - ”(双连字符)不得出现在其中   注释。] 不得在其中识别参数实体引用   评价。

答案 1 :(得分:35)

也许这对某人有帮助。我遇到了一个问题,我想在XML中注释掉一个以 - :

开头的命令行参数
<arg line="-v --line-break 0" />  

这样的自然正常的方式

<!-- <arg line="-v --line-break 0" /> -->

没有用,但我发现,如果-被替换为它的UTF-8等效&#x002D;,那么它可以在评论中容忍。

所以在我的例子中是字符串

<arg line="-v &#x002d;&#x002d;line-break 0" />

被正确解析,可以成为评论的一部分。

当然它看起来有点难看,但如果有人想要保留一个字符串 - 作为他的XML中的评论 - 我认为它仍然比没有好。

答案 2 :(得分:27)

这是XML中的一个愚蠢的规则,因为它是在SGML中,人们不想破坏兼容性。为什么它在SGML中是任何人的猜测:可能是因为它在原始解析器中保存了三行代码。

答案 3 :(得分:21)

--不允许与SGML兼容。来自On SGML and HTML

  

标记声明打开之间不允许有空格   分隔符(“&lt ;!”)和注释打开分隔符(“ - ”),但是   允许在注释关闭分隔符(“ - ”)和标记之间   声明关闭分隔符(“&gt;”)。一个常见的错误是包括a   注释中的连字符串(“---”)。作者应该避免   将两个或多个相邻的连字符放在注释中。

所以在SGML <!>打开和关闭“标记声明”和--打开和关闭评论。

答案 4 :(得分:0)

这个问题迟早会影响希望使用XML注释来禁用不需要的内容的任何人。我有数天的主要问题,因为Spring上下文配置无法加载,而没有任何详细说明原因。 问题是习惯这样评论内容块:

<value>ABC1</value>
<!-- <value>ABC2</value> -->
<value>ABC3</value>

注释它必须更改为此:

<!--
    <value>ABC1</value>
    !-- <value>ABC2</value> --
    <value>ABC3</value>
-->

注释掉的块中的破折号(而不是被忽略)使整个文件的解析变得混乱,无论它们位于何处。