XML注释的正确写法是,不可嵌套、不可位于根元素前(XML声明后首行可)、不可在标签内;注释中禁用--和以-结尾,不解析CDATA或标签,不进行实体替换。
XML注释的正确写法是
XML里只有一种合法注释语法,就是
结尾的包裹形式。它不能嵌套,不能出现在根元素前(即XML声明之后、第一个标签之前可以,但整个文档最开头不行),也不能放在标签内部——比如
attr="val">
是非法的。
常见错误现象:
XML parsing error: comment not terminated
,通常是因为忘了闭合
-->
,或者中间意外出现了
--
(比如写成
,XML解析器会在第一个
--
就报错)。
注释内容里不能出现
--
,也不能以
-
结尾(如
也不行)
可以跨行,换行符会被当作普通空白处理,不影响解析
注释不参与任何数据处理,DOM 或 XPath 都不会读取它
XML声明后面紧挨着写注释会出错吗
会。XML声明
必须是文件第一行(可选BOM除外),且其后只能跟空白或注释——但这个注释还不能“顶格”写在声明正下方:如果声明后直接换行、然后
这种写法虽然看起来“嵌套了”,但对XML解析器来说,它只是注释内容里的几个字符,不会被识别为CDATA段;同理,
里的
也不会被解析成标签。
想临时“屏蔽”一段带标签的结构,用注释是安全的,但别指望它保留语义或可被程序提取
注释内容不经过实体替换,所以
用 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实现
注意:保留注释会增大内存占用,且多数业务逻辑根本不需要——别为了“可能有用”而默认开启
注释语法本身很简单,真正容易翻车的是边界场景:嵌套意图、声明紧邻、编辑器自动补全失灵、解析器默认丢弃。写的时候多看一眼
-->
有没有,读的时候别假设它一定存在。