确定查询输出的xpath的类型(节点,字符串)

时间:2012-08-01 16:35:27

标签: python xpath types lxml

有没有办法独立于XML文档确定xpath中返回值的类型?具体来说,我正在使用lxml。

示例:

  • //a//b[a/@href]将始终返回零个或多个元素的列表。
  • //a/text()//a/@href将始终返回零个或多个字符串的列表。

虽然我可以想到尝试分析这些的各种方法,但感觉就像试图重新发明轮子一样。有没有更好的方法呢?

背景

当我发现没有任何a标签并且我写了root.xpath('//a')[0]时,我很难接受异常。而且我不想盲目地抓住一切。所以我写了一组总是返回正确类型的函数。 cssselectorattrib替换工作正常,但在不知道输出应该是什么的情况下,我无法满足xpath输出的期望。

如果你真的在乎,这是我的代码。 https://scraperwiki.com/editor/raw/irked

1 个答案:

答案 0 :(得分:0)

假设您的XPath表达式(如//b[a/@href])是静态的,将始终返回相同的类型。 (在这种情况下,元素列表。)您只想知道列表是否为空。一个简单的if语句可以做到这一点:

results = document.xpath('//b[a/@href]')
if results:
    do_something(results[0]
else:
    no_result()