Доступ к текстовому значению последнего вложенного элемент без идентификаторов id или класса

Мне нужно получить доступ к значению 10-го элемента в последней строке таблицы. Я не могу использовать идентификатор в качестве крючка, потому что только таблица имеет идентификатор. Мне удалось заставить его работать, используя приведенный ниже код. К сожалению, его статичность. Я знаю, что мне всегда понадобится элемент 10th , но я никогда не узнаю, какую строку он должен быть. Я просто знаю, что это должна быть последняя строка в таблице. Как бы я заменил "tr[6]" фактическим последним динамически? (это, наверное, очень просто, но это буквально мой первый раз, когда я что-то делаю с рубином).

page = Nokogiri::HTML(open(url))
 test = page.css("tr[6]").map { |row| 
 row.css("td[10]").text}

 puts test
3 ответа

Вы хотите сделать:

page.at("tr:last td:eq(10)")


Вы можете использовать селекторы псевдосектора CSS для этого:

page.css("table#the-table-id tr:last-of-type td:nth-of-type(10)")

Сначала выбирается с соответствующим <code>id, затем выбирается последний дочерний этой таблицы, а затем выбирается 10-й . Результатом является массив всех совпадающих элементов, если вы ожидаете, что только один, вы можете использовать at_css вместо этого.

<p> Если вы предпочитаете XPath, вы можете использовать это:</p> <pre class="prettyprint linenums">page.xpath("//table[@id='the-table-id']/tr[last()]/td[10]")</pre> <table> <tbody> <tr> <td> этого </td> </tr> <tr> </tr> </tbody> </table>


Если вам не нужно ничего делать с этой страницей, вы можете сделать это одной строкой с помощью

test = Nokogiri::HTML(open(url)).search("tr").last.search("td")[10].text

В противном случае (это будет работать):

page = Nokogiri::HTML(open(url))
test = page.search("tr").last.search("td")[10].text
puts test

Пример: (Используется большая таблица из другого вопроса в StackOverflow)

Nokogiri::HTML(open("http://en.wikipedia.org/wiki/Richard_Dreyfuss")).search('table')[1].search('tr').last.search('td').children.map{|c| c.text}.join(" ")
#=> "2013 Paranoia Francis Cassidy"

Есть ли конкретная причина, по которой вам нужен Array с 1 элементом? Мой пример вернет строку, но вы можете легко изменить ее, чтобы вернуть Array.

licensed under cc by-sa 3.0 with attribution.