0

我在循环中有这个 Xpath 查询,

//div[@class='listing_content'][#{i}]/div/div/h3/a/text()

我想单独处理每个节点

问题是它提供了正确的节点,但同时所有这些节点。

还有什么时候i > 1,它什么也不返回?

for i in (1...30)
  name = page.xpath("//div[@class='listing_content'][#{i}]/div/div/h3/a/text()")
  puts "this is name"
  puts name

  #Get Business phone
  phone = page.xpath("//div[@class='listing_content'][#{i}]//span[@class='business-phone phone']/text()")
  puts "this is phone"
  puts phone

  #Get Business website(if any)
  puts "this is website"
  website = page.xpath("//div[@class='listing_content'][#{i}]//li[@class='website-feature']//@href")
  puts website
end
4

1 回答 1

2

同样当 i > 1 时,它什么也不返回?

这是 XPath 中第二多的常见问题解答:

使用

(//div[@class='listing_content'])[#{i}]/div/div/h3/a/text()

观察到的行为的原因是在 XPath 中[]具有比//伪运算符更高的优先级(优先级)。

因此,在您的原始表达式中,您指定应该选择作为其父级div[@class='listing_content']的 -th 子级的每个元素。i

但是,在您正在使用的 XML 文档中,每个都div[@class='listing_content'] 恰好是其父级的第一个(也是唯一一个)子级——因此,如果i > 1没有选择任何内容。

As in any other language, in order to override the default priority, we must use brackets.

于 2012-07-06T18:23:08.913 回答