使用lxml XPATH多条件查询XML节点报invalid predicate错误如何解决
错误原因
- XPath语法错误:你编写的路径
.//*RegistroBdpo不符合规范,*是节点通配符,不能直接与标签名拼接使用,多余的*导致谓词无法正常解析,触发invalid predicate报错。 - 次要优化点:XPath表达式用双引号做值匹配时,外层用单引号包裹整个字符串即可,不需要额外转义双引号,可读性更高。
修正后代码
import lxml.etree as ET r = ET.parse(xml_file_location) # 移除路径中多余的* xpath_exp = './/RegistroBdpo[TipoEvento="5" or TipoEvento="6"][PerdaRaizNumeroEvento="00250"]' res = [ reg.find('IdInternaEvento').text for reg in r.iterfind(xpath_exp) ]
你提供的示例XML中,符合筛选条件的结果为Pasta 95。
内容的提问来源于stack exchange,提问作者Luiz
相关产品推荐
相关产品推荐

