如何选择所有细胞和类似物

时间:2012-05-28 13:17:49

标签: css html-parsing nokogiri

请原谅,如果这是非常基本的话。我一直试图在行数组中遍历每个单元格,包括标题单元格。我可以在Nokogiri CSS选择器中使用OR运算符吗?

thang= Nokogiri::HTML(IO.read "|cat page.html").css('table[@id="costbasisTable"] tr')

正确提取所有行,包括标题行(在后续页面上重复):

thang[0].inner_html
=> <th class="tLeft"></th><th>cellA2</th><th>cellA3data</th>

thang[1].inner_html
=> <td>cellB1</td><td>cellB2</td><td>cellB3data</td>

问题在于以下情况,如果该行仅包含 th 而不是 td ,则可能会返回空白:

N=0
thang[N].css("td").map{|c| c.text.strip.gsub(/\t.*/,"").delete ",".tr("&/|:;\n","_")}.to_a

.css(...)的哪个参数表示“匹配任何<td> OR <th>单元格”?

使用 .xpath()代替这些Nokogiri XML元素是否可行/更好?

1 个答案:

答案 0 :(得分:7)

您想要使用以下任一项:

# thang[n] is a Nokogiri <tr> node
cells = thang[n].css('th,td')
cells = thang[n].xpath('./th | ./td')

请注意,CSS版本将匹配任何嵌入式表格(如果您有这样的恐怖),而XPath版本只匹配该行的直接子级。