如何根据Table在其Rows中保存的信息创建数组?

时间:2011-06-09 20:55:51

标签: arrays ruby html-table row watir

我有一个具有任意行数的表 在这些行中,我的名称位于行中的列中,我想将其拉入并放入数组中 我想要从中获取的表格如下所示:

<table id="team-1200d35e-7528-11e0-9a7d-00b7c9f2a9c6-table" class="grid" style="width: 748px;">
   <tbody>
     <tr class="team-member odd" row="1" team="0" data-id="66c36a98-7832-11e0-968b-5e9370556780" name="Barbara Gordon">
     </tr>
     <tr class="team-member even" row="5" team="0" data-id="a9042cb6-7527-11e0-9a7d-00b7c9f2a9c6" name="Bruce Wayne">
     </tr>
     <tr class="team-member even" row="0" team="0" data-id="39daacee-7832-11e0-968b-5e9370556780" name="Dick Grayson">
     </tr>
    </tr>
   </tbody>
  </table>

我想要提取的每一行的信息是name =“”。

如何从中拉出名称并创建一个数组?

1 个答案:

答案 0 :(得分:2)

假设您的表只是一个字符串,您可以使用,例如REXML(似乎是手动安装)将其解析为XML文档,并提取名称属性,如下所示:

require 'rexml'
names = []
doc = REXML::Document.new(my_table_data)
doc.elements.each('table/tbody/tr') do |el|
  names << el.attributes['name'] if el.attributes['name']
end
names # => ['Barbara Gordon', 'Bruce Wayne', 'Dick Grayson']

或类似地使用Nokogiri(可以作为gem安装):

require 'nokogiri'
names = []
doc = Nokogiri::XML.fragment(my_table_data)
doc.xpath('table/tbody/tr[@name]').each do |el|
  names << el['name']
end
names # => ['Barbara Gordon', 'Bruce Wayne', 'Dick Grayson']

你可以变得更加漂亮并按空格分割名字/姓氏,但这会对名字中包含空格的人造成严重破坏......