使用Nokogiri时循环播放8份td项目

时间:2017-03-15 06:13:53

标签: ruby loops nokogiri

我不能为我的生活看到为什么每次循环时我得到8个特定值(td [0])。我检查了我在网上看到的内容,但显然我错了。

假设'表'与某些Nokogiri html路径有关。我试图在tr中获取第一个td(位置0,所以td [0])的内容。

SELECT  [N-1], SI_Initiative, LineCode, Timestamp
FROM TBL_VC_DATA t1
WHERE t1.Timestamp = 
    (SELECT Max(t2.Timestamp) 
     FROM TBL_VC_DATA t2
     WHERE t2.timestamp<>t1.timestamp
     AND t2.[N-1]=t1.[N-1]
     AND t2.SI_Initiative=t1.SI_Initiative
     AND t2.LineCode=t1.LineCode);

我只希望每个tr的位置[0]的数据一次。相反,我为每个tr获得了8份td [0]。我错过了一些我认为明显的东西,但是什么呢?

1 个答案:

答案 0 :(得分:-1)

result = []
table.css('tr').each do |row|
  result << row.css('td')[0].text if row.css('td')[0]
end

问题很简单,有些行可能根本没有td。这就是为什么你要在调用#text之前检查是否有任何td。

如果您更喜欢使用#map:

result = table.css('tr').map do |row| # map returns array of results
  row.css('td')[0].text if row.css('td')[0]
end.compact # compact deletes all the nil elements from array