我在循环中有这个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
答案 0 :(得分:2)
当我> 1,它什么都不返回?
这是XPath中第二大常见问题解答:
使用强>:
(//div[@class='listing_content'])[#{i}]/div/div/h3/a/text()
观察到的行为的原因,在XPath中,[]
的优先级(优先级)高于//
伪运算符。
因此,在原始表达式中,您指定应选择其父项的div[@class='listing_content']
个子i
元素。
但是,在您正在使用的XML文档中,每个div[@class='listing_content']
恰好是其父级的第一个(也是唯一的)子级 - 因此如果i > 1
则没有选择任何内容。
与任何其他语言一样,为了覆盖默认优先级,我们必须使用括号。