<p>XML注释的正确写法是<!-- ... -->,不可嵌套、不可位于根元素前(XML声明后首行可)、不可在标签内;注释中禁用--和以-结尾,不解析CDATA或标签,不进行实体替换。</p>

XML注释的正确写法是 <!-- ... -->
XML里只有一种合法注释语法,就是<!--开头、-->结尾的包裹形式。它不能嵌套,不能出现在根元素前(即XML声明之后、第一个标签之前可以,但整个文档最开头不行),也不能放在标签内部——比如<tag <!-- no --> attr="val">是非法的。
常见错误现象:XML parsing error: comment not terminated,通常是因为忘了闭合-->,或者中间意外出现了--(比如写成<!-- 这里用了两个短横--再写点 -->,XML解析器会在第一个--就报错)。
- 注释内容里不能出现
--,也不能以-结尾(如<!-- end- -->也不行) - 可以跨行,换行符会被当作普通空白处理,不影响解析
- 注释不参与任何数据处理,DOM 或 XPath 都不会读取它
XML声明后面紧挨着写注释会出错吗
会。XML声明<?xml version="1.0" encoding="UTF-8"?>必须是文件第一行(可选BOM除外),且其后只能跟空白或注释——但这个注释还不能“顶格”写在声明正下方:如果声明后直接换行、然后<!--,是合法的;但如果声明末尾没换行、紧接着写<!--(即<?xml ...?><!--连在一起),部分解析器会拒绝。
- 安全做法:XML声明独占一行,下一行再写
<!-- - 不要在声明和注释之间加空格或制表符(某些老解析器对空白敏感)
- 验证工具如
xmllint --noout file.xml能快速暴露这类格式问题
注释里能写 CDATA 或其他标记吗
不能。注释就是纯文本容器,<!-- <![CDATA[...]]> -->这种写法虽然看起来“嵌套了”,但对XML解析器来说,它只是注释内容里的几个字符,不会被识别为CDATA段;同理,<!-- <element> -->里的<element>也不会被解析成标签。
- 想临时“屏蔽”一段带标签的结构,用注释是安全的,但别指望它保留语义或可被程序提取
- 注释内容不经过实体替换,所以
<!-- 里的<code>不会变成<code> - 如果注释内容很长、含特殊符号,建议用编辑器的注释快捷键(如 VS Code 的
Ctrl+/),避免手误漏掉-->
用 Python / Java 解析时注释会被读到吗
默认不会。标准解析器如 Python 的xml.etree.ElementTree、Java 的DocumentBuilder都把注释当“非信息性内容”跳过。除非显式启用注释支持,否则ElementTree.parse()返回的树里根本看不到Comment节点。
- Python 中需用
etree.XMLParser(strip_cdata=False, resolve_entities=False, remove_comments=False)+etree.Comment类型判断来捕获 - Java 的
DocumentBuilderFactory.setIgnoringComments(false)才可能保留,但具体还得看DOM实现 - 注意:保留注释会增大内存占用,且多数业务逻辑根本不需要——别为了“可能有用”而默认开启
注释语法本身很简单,真正容易翻车的是边界场景:嵌套意图、声明紧邻、编辑器自动补全失灵、解析器默认丢弃。写的时候多看一眼-->有没有,读的时候别假设它一定存在。









