XML注释禁止出现连续“--”,因其会干扰结束标记-->的识别;合法注释需满足正则[^-]*(-[^-])*,可用全角字符或拆分方式安全表达破折号。

XML注释中不能包含连续的“--”(两个连字符),这是XML规范明确禁止的。
XML注释的基本语法
XML注释以结束。例如:
注释内容可以包含字母、数字、空格、标点(除特定限制外),但有两个关键约束:
- 注释内不能出现“--”子串(即两个连续的连字符)
- 注释不能以
-结尾(即不能以-->之前的那个-单独存在,实际意味着倒数第二个字符不能是-)
为什么禁止“--”?
因为--是注释结束标记-->的前缀。如果注释体内出现--,解析器可能提前误判注释结束位置,导致解析失败或行为未定义。XML 1.0规范(W3C)明确规定:注释内容必须匹配正则表达式[^-]*(-[^-])*,即不允许两个连续的-。
例如以下写法是非法的:
❌(含--)
❌
如何安全地表达连字符或破折号?
如果确实需要在注释中表示“—”(中文破折号)、“–”(en dash)或“-”(短横线),可采用以下方式:
- 用全角字符替代:如
-(U+FF0D)或—(U+2014),它们不属于XML禁止的-- - 拆开书写并加说明:如
- 使用CDATA块不适用——注释本身不支持嵌套CDATA,CDATA只用于字符数据,不是注释的替代方案
验证与调试建议
大多数XML解析器(如libxml2、Java DOM、Python xml.etree)在遇到含--的注释时会直接报错,例如:
FATAL ERROR: Comment contains '--'
建议在编辑XML时:
- 启用XML语法高亮/校验的编辑器(如VS Code + XML Tools、Oxygen XML)
- 提交前用
xmllint --noout file.xml命令行验证 - 避免从富文本(如Word、网页)直接复制带自动连字符的文本到注释中










