【问题标题】:How to select all cells <th> and <td> alike如何选择所有单元格 <th> 和 <td> 类似
【发布时间】:2012-05-29 13:10:07
【问题描述】:

如果这是非常基本的,请原谅。我一直在尝试遍历行数组中的每个单元格包括标题单元格。我可以在 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(...) 的哪个参数表示“匹配任何&lt;td&gt;&lt;th&gt; 单元格”?

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

【问题讨论】:

  • 我不确定 Nokogiri 是什么,但下面的 CSS 选择器可以工作:table tr &gt; *
  • 我无法让thang[0].css("table tr &gt; *") 捕获任何单元格。尝试了thang[1],并稍微改变了 CSS 选择器
  • .css('td, th').xpath('./td|./th')
  • @taro 谢谢,这对我有用

标签: css html-parsing nokogiri


【解决方案1】:

您想使用以下任一:

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

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

【讨论】:

  • 谢谢。 cells = thang[n].css('*') 还匹配了我需要的标题和非标题单元格(不知道这里还包括什么)
  • cells = thang[n].css('th,td')的问题是订单丢失。 cells 将首先包含所有ths,然后是所有tds。所以&lt;table&gt;&lt;th&gt;&lt;/th&gt;&lt;td&gt;&lt;/td&gt;&lt;th&gt;&lt;/th&gt;&lt;td&gt;&lt;/td&gt;&lt;/table&gt; 给了['th','th','td','td']。我希望得到所有ths 和tds,但保留他们的顺序。 :-(
  • @PeterV.Mørch doc.xpath('//th | //td') 确实保留了他们的订单,doc.xpath('//*[name()="th" or name()="td"]') 也是如此。
猜你喜欢
  • 2012-08-29
  • 2020-12-30
  • 2016-09-18
  • 2017-10-17
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
相关资源
最近更新 更多