XML评论和“ – ”

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

XML似乎不喜欢评论里面的“ – ”。 我在某处读到' – '在<! ... > <! ... >东西,但是(偶数–s)似乎也是无效的。 如果它是一些历史特征,什么是“亲”的一部分呢? (“反”部分无法在评论中)。

什么是评论处理变得复杂化的原因是不是仅仅以“ – >”结尾,而是允许“ – ”在里面?

从标准文件:

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

[定义:评论可能出现在其他标记之外的文档中的任何地方; 另外,它们可能出现在语法允许的地方的文档types声明中。 它们不是文档的字符数据的一部分; 一个XML处理器可能,但不一定使应用程序检索评论的文本成为可能。 为了兼容性 ,string“ – ”(双连字符)不能出现在注释中。]参数实体引用不能在注释中被识别。

也许这可能对某人有所帮助。 我有一个问题,我想注释掉一个以 – 开头的命令行参数:

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

所以自然是这样正常的方式

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

没有工作,但我发现,如果-被replace为UTF-8相当于&#x002D; 它的工作原理和可以容忍的意见。

所以在我的情况下,string

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

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

当然,它看起来有点难看,但是如果有人想保留一个string – 就像在他的XML中的注释 – 我认为它还是比没有好。

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

--不允许与SGML兼容。 从SGML和HTML :

在标记声明开放分隔符(“<!”)和注释开放分隔符(“ – ”)之间不允许有空格,但在注释closures分隔符(“ – ”)和标记声明closures分隔符( “>”)。 一个常见的错误是在注释中包含一串连字符(“—”)。 作者应避免在注释中放置两个或更多个相邻的连字符。

所以在SGML <! >打开和closures“标记声明”,并打开和closures注释。