I have this Xpath query inside a loop,
//div[@class='listing_content'][#{i}]/div/div/h3/a/text()
I want to process each node individually
The problem it gives the correct nodes, but all of them at once at once.
Also when i > 1, it returns nothing at all?
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
This is the second most FAQ in XPath:
Use:
The cause of the observed behavior is that in XPath the
[]has higher precedence (priority) than the//pseudo-operator.So, in your original expression you specify that every
div[@class='listing_content']element that is thei-th child of its parent should be selected.However, in the XML document you are working with, every
div[@class='listing_content']happens to be the first (and only) child of its parent — therefore ifi > 1then nothing is selected.As in any other language, in order to override the default priority, we must use brackets.