Как создать массив из информации, которую таблица хранит в своих строках? - PullRequest
0 голосов
/ 10 июня 2011

У меня есть таблица с произвольным количеством строк.
В этих строках у меня есть имена в столбцах внутри строк, которые я хочу вытащить и поместить в массив.
Стол, из которого я хочу вытащить, выглядит так:

<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 Ответ

2 голосов
/ 10 июня 2011

Предполагая, что ваша таблица - это просто строка, вы можете проанализировать ее как документ XML, используя, скажем, REXML (которая выглядит как ручная установка), и извлечь атрибуты имени следующим образом:

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 (который может быть установлен как драгоценный камень):

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']

Вы могли бы придумать и разделить имена / фамилии по пробелам, но это нанесло бы ущерб людям, чье имя включает пробел ...

...