2012-08-01 69 views
0

有没有一种方法可以独立于XML文档来确定xpath返回值的类型?具体来说,我使用lxml。确定查询的xpath输出的类型(节点,字符串)

例子:

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

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

背景

我很无聊,要赶上例外事实证明时,有没有任何a标签和我写root.xpath('//a')[0]。我不想一味地抓住一切。所以我写了一组总是返回正确类型的函数。 cssselectorattrib替代品工作得很好,但我不能满足xpath输出的期望,而不知道输出应该是什么。

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

+0

如果您不想捕获异常,请存储从xpath返回的列表并检查长度。或者使用正确的XPath获取第一个元素:'root.xpath('// a [1]')' – 2012-08-01 16:55:43

+1

实际上,所有四个表达式都会返回节点列表。元素节点为前两个,文本节点为第三个,属性节点为第四个。 – 2012-08-01 22:24:24

回答

0

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

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