XPath的count()函数是专门用于统计节点集合数量的内置函数,它接收一个节点集合作为参数,返回该集合中节点的总数,是XML、HTML文档解析过程中非常实用的工具。

count()函数基本语法
count()函数的语法非常简单,格式为count(节点集合),其中节点集合可以是任意合法的XPath路径表达式返回的节点集合。函数返回值为数值类型,表示集合中节点的总个数。
比如要统计XML文档中所有<book>节点的数量,对应的XPath表达式就是count(//book)。
常见使用场景示例
场景1:统计所有同名节点数量
假设我们有如下结构的XML文档,需要统计其中所有<student>节点的数量:
<?xml version="1.0" encoding="UTF-8"?>
<school>
<student id="1">
<name>张三</name>
<age>18</age>
</student>
<student id="2">
<name>李四</name>
<age>19</age>
</student>
<student id="3">
<name>王五</name>
<age>18</age>
</student>
</school>
对应的XPath表达式为:
count(//student)
执行该表达式会返回数值3,因为文档中一共有3个<student>节点。
场景2:统计符合特定条件的节点数量
如果需要统计上述XML中年龄小于19岁的<student>节点数量,可以结合谓语条件使用count()函数:
count(//student[age<19])
该表达式会先筛选出age子节点值小于19的<student>节点集合,再统计集合数量,最终返回结果为2。
场景3:在Python中结合lxml库使用
在实际开发中,我们通常会用Python的lxml库解析XML或HTML文档,然后执行XPath表达式。以下是统计上述XML中<student>节点数量的完整代码:
from lxml import etree
# 定义XML内容
xml_content = """<?xml version="1.0" encoding="UTF-8"?>
<school>
<student id="1">
<name>张三</name>
<age>18</age>
</student>
<student id="2">
<name>李四</name>
<age>19</age>
</student>
<student id="3">
<name>王五</name>
<age>18</age>
</student>
</school>"""
# 解析XML
tree = etree.fromstring(xml_content.encode('utf-8'))
# 执行XPath统计节点数量
student_count = tree.xpath('count(//student)')
print(f"学生节点总数:{student_count}")
运行上述代码会输出:学生节点总数:3.0,注意count()函数返回的是浮点型数值。
注意事项
- count()函数的参数必须是节点集合,如果传入的是单个节点,会自动转换为只包含该节点的集合,统计结果为1。
- 如果路径表达式没有匹配到任何节点,count()函数会返回0,不会抛出异常。
- 在HTML解析场景中,使用count()函数的逻辑和XML场景完全一致,只需要将解析对象换成HTML文档即可。