使用 Nokogiri 解析 table 行时如何考虑 colspan?

How do I account for colspan when parsing a table row using Nokogiri?

我将 Nokogiri 与 Rails 5 一起使用。给定来自 HTML table 的一行,例如

<tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
</tr>

我目前使用此代码将 table 单元格数据提取为数组...

row_values = row.css('td, th').map{|str| str.text }
                                          .map{|str| str.gsub(/[[:space:]]+/, ' ').gsub(/\A\p{Space}+|\p{Space}+\z/, '') }.join("\t")

其中 "row" 是我的 table 行。我的问题是,我该如何调整上述内容,以便如果 table 单元格包含 colspan 属性,我将为 colspan 占用的每一行添加额外的空白元素到我的数组中?例如,如果我的行是

<tr>
    <td>1</td>
    <td colspan="2">2</td>
    <td>3</td>
</tr>

我的数组是

["1", "2", "", "3"]

注意我有一个额外的“”,因为第二个 table 单元格有一个 "colspan" 等于 2。如果它是“3”,我会有两个额外的“”我的数组等等。

一种方法是添加空单元格:

doc.search('[colspan]').each{|td| td.after '<td></td>' * (td['colspan'].to_i - 1)}

现在您可以像以前那样做