You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过XPath直接获取lxml中的首个元素?

lxml 获取首个匹配元素的方案

你可以通过以下几种方式实现类似bs4 select_one的效果,无需自己编写辅助函数:

1. 用XPath表达式直接限定首个结果

XPath支持用[1]索引(注意XPath索引从1开始)来获取匹配的第一个节点,结合next()函数可以安全获取结果(无匹配时返回None):

from lxml import etree

tree = etree.fromstring('<who>syslogd</who>')
# 获取首个文本节点,无匹配则返回None
text = next(iter(tree.xpath('/who/text()[1]')), None)

2. 使用lxml内置的find()/findtext()方法

Element对象自带的find()方法接收XPath表达式,直接返回第一个匹配的元素节点,无匹配则返回None,完全贴合你想要的select_one用法:

from lxml import etree

tree = etree.fromstring('<who>syslogd</who>')
# 获取首个元素节点
target_element = tree.find('/who')
# 直接获取节点文本,无匹配则返回None
target_text = tree.findtext('/who')

3. 用CSS选择器实现类似select_one

如果习惯bs4的CSS选择器语法,可以借助lxml的cssselect扩展,搭配next()函数实现:

from lxml import etree
from lxml.cssselect import CSSSelector

tree = etree.fromstring('<who>syslogd</who>')
selector = CSSSelector('who')
# 获取首个匹配元素,无匹配则返回None
target_element = next(selector(tree), None)

内容的提问来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:55:16