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 で 2 番目に多い FAQ です。

使用:

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

観察された動作の原因は、 XPath で疑似演算子[]よりも優先順位 (優先度) が高いことです。//

したがって、元の式では、親div[@class='listing_content']の 番目の子であるすべての要素を選択するように指定します。i

ただし、作業中の XML ドキュメントでは、すべてdiv[@class='listing_content'] がたまたまその親の最初の (そして唯一の) 子であり、その場合i > 1は何も選択されていません。

他の言語と同様に、デフォルトの優先度をオーバーライドするには、括弧を使用する必要があります。

于 2012-07-06T18:23:08.913 に答える