【问题标题】:Iterate through table data and fill array with row and td values遍历表数据并用行和 td 值填充数组
【发布时间】:2014-01-10 02:24:12
【问题描述】:

我正在尝试遍历表格行并将每一行作为一个数组,并在其中将单个单元格的所有文本作为第一个数组中的数组。所以这是我想要的输出:

[
    [row1][
              [td element1 from row 1],
              [td element2 from row 1]  
    ],
    [row2][
              [td element1 from row 2],
              [td element2 from row 2]

    ]
]

这是我的代码:

           page = Nokogiri::HTML(open(url))
            table = page.at('table#ctl00_MainContent_gvSearchResults')
            rows = Array.new
            rowCells = Array.new
            cells = Array.new

            table.search('tr').each do |tr|
                tr.search('td').each do |cell|
                    cells.push(cell.text.gsub(/\r\n?/, "").strip)

                end
                rowCells.push(cells)
            end

            p rowCells

这将返回以下结果,其中值是所有行中的 td 元素。它几乎是正确的,因为它为每一行返回一个数组,但在每一行的该数组中,它将所有行的所有单元格放置,因此每个行数组具有相同的值。

[
    [0] [
            [0] "value1",
            [1] "value2" 
        ]
]

【问题讨论】:

  • 您需要在每行迭代后重新初始化cells
  • 你能告诉我具体怎么做吗?这就像我在 ruby​​ 上的第二天,所以我基本上是个白痴。

标签: ruby nokogiri


【解决方案1】:

当你开始一个新行时重新初始化cells

page = Nokogiri::HTML(open(url))
table = page.at('table#ctl00_MainContent_gvSearchResults')
rowCells = Array.new

table.search('tr').each do |tr|
  cells = Array.new
  tr.search('td').each do |cell|
    cells.push(cell.text.gsub(/\r\n?/, "").strip)
  end
  rowCells.push(cells)
end

p rowCells

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2017-02-16
    相关资源
    最近更新 更多