Python 确定查询中xpath输出的类型(节点、字符串)
是否有一种独立于XML文档的方法来确定xpath返回值的类型?具体来说,我使用的是lxml 示例:Python 确定查询中xpath输出的类型(节点、字符串),python,xpath,types,lxml,Python,Xpath,Types,Lxml,是否有一种独立于XML文档的方法来确定xpath返回值的类型?具体来说,我使用的是lxml 示例: //a和//b[a/@href]将始终返回零个或多个元素的列表 //a/text()和//a/@href将始终返回零个或多个字符串的列表 虽然我可以想出各种方法来分析这些问题,但感觉就像是试图重新发明轮子。有更好的方法吗 背景 当发现没有任何a标记并且我已经编写了root.xpath('//a')[0]时,我已经厌倦了捕获异常。我不想盲目地抓住一切。因此,我编写了一组函数,它们总是返回正确类型
和//a
将始终返回零个或多个元素的列表//b[a/@href]
和//a/text()
将始终返回零个或多个字符串的列表//a/@href
a
标记并且我已经编写了root.xpath('//a')[0]
时,我已经厌倦了捕获异常。我不想盲目地抓住一切。因此,我编写了一组函数,它们总是返回正确类型的内容。cssselector
和attrib
替换工作正常,但是如果不知道输出应该是什么,我就无法满足xpath
输出的期望
如果你真的在乎,这是我的密码 假设像
//b[a/@href]
这样的XPath表达式是静态的,is将始终返回相同的类型。(在本例中是元素列表。)您只想知道列表是否为空。一个简单的if
语句可以做到这一点:
results = document.xpath('//b[a/@href]')
if results:
do_something(results[0]
else:
no_result()
如果不想捕获异常,请存储xpath返回的列表并检查其长度。或者使用正确的XPath获取第一个元素:
root.XPath(“//a[1]”)
实际上,所有四个表达式都返回节点列表。前两个为元素节点,第三个为文本节点,第四个为属性节点。