在XML解析与数据抽取场景中,注释节点常常被忽略,但它可能承载着重要的说明或标记信息。XPath作为查询XML和HTML的标准语言,提供了直接选取注释节点的能力,不必借助正则表达式去硬抠文本。

XPath注释节点选取语法
XPath通过内置节点测试comment()来匹配注释节点。注释节点在DOM中类型为注释,语法上写为comment(),不能写成带尖括号的形式。
常见用法
//comment():选择文档中所有注释节点/root/note/comment():选择root下note元素里的注释comment()配合谓词可过滤,如//comment()[contains(.,'todo')]
XML示例与提取代码
下面是一段包含注释的XML,以及用Python的lxml库通过XPath提取注释节点的完整示例。
<?xml version="1.0" encoding="UTF-8"?> <book> <!-- 这是一本技术书 --> <title>XPath入门</title> <!-- 待补充作者信息 --> <price>39.00</price> </book>
from lxml import etree
xml_text = '''
<book>
<!-- 这是一本技术书 -->
<title>XPath入门</title>
<!-- 待补充作者信息 -->
<price>39.00</price>
</book>
'''
tree = etree.fromstring(xml_text.encode('utf-8'))
# 选取所有注释节点
comments = tree.xpath('//comment()')
for c in comments:
# c.text 即为注释文本内容
print('注释内容:', c.text.strip())
# 只选取book直接子元素的注释
child_comments = tree.xpath('/book/comment()')
print('直接子注释数量:', len(child_comments))
使用注意点
在HTML文档中同样可以使用comment(),但HTML注释写法与XML一致。若使用浏览器原生XPath(如document.evaluate),返回的注释节点类型为COMMENT_NODE,通过node.data获取文本。
注意:comment()只选注释,不会选到CDATA或普通文本,混合内容处理时要分清节点类型。
小结
用XPath选注释节点核心就是comment()测试,配合路径与谓词就能灵活提取。比起字符串截取,这种方法稳定且符合标准,适合各类XML配置或文档解析任务。