Подтвердить что ты не робот

Нокигири рекурсивно забирает всех детей

Проблема

Я запускаю статистику по различным URL-адресам. Я хочу найти элемент верхнего уровня с самым концентрированным количеством детей. Метод, которым я хотел бы следовать, состоит в том, чтобы идентифицировать все элементы верхнего уровня, а затем определить, какой процент от всех элементов на странице принадлежит ему.

Цель

  • Рекурсивно получить все дочерние элементы данного элемента.

Входы: элемент Nokogiri

Выходы: массив элементов Nokogiri ИЛИ количество общего количества детей

Настройка

  • Ruby 1.9.2
  • драгоценный камень Нокогири

Что я в итоге придумал (это работает, но не так красиво, как мой выбранный ниже ответ)

getChildCount(elem)
    children = elem.children
    return 0 unless children and children.count > 0
    child_count = children.count
    children.each do |child|
        child_count += getChildCount(child)
    end
    child_count
end
4b9b3361

Ответ 2

# Non-recursive
class Nokogiri::XML::Node
  def descendant_elements
    xpath('.//*')
  end
end

# Recursive 1
class Nokogiri::XML::Node
  def descendant_elements
    element_children.map{ |kid|
      [kid, kid.descendant_elements]
    }.flatten
  end
end

# Recursive 2
class Nokogiri::XML::Node
  def descendant_elements
    kids = element_children.to_a
    kids.concat(kids.map(&:descendant_elements)).flatten
  end
end