Nokogiri сначала получает только элементы списка со ссылками - PullRequest
0 голосов
/ 14 мая 2019

У меня есть документ, который выглядит следующим образом:

<ul>
  <li>
    <a href="/Synergies">Link</a>Content
  </li>
  </li>
    Content <a href="/Synergies">Link</a>
  </li>
</ul>

Я бы хотел получить только те элементы списка, которые начинаются с тега <a>, т. Е. Первый <li> был бы хитом, а второй - нет.

Я попытался получить все элементы списка и сопоставить регулярное выражение в html-контенте, но, похоже, он не работает:

list.search('li').each do |item|
  if /^<a href="\/Synergies".*$/.match(item) 
    puts link # hit?
  end
end

Любой совет будет оценен!

1 Ответ

1 голос
/ 14 мая 2019

Вы можете проверить, не является ли первый дочерний элемент элемента текстом или пустым текстом:

list.search('li').each do |item|
  if !item.children.first.text? || item.children.first.text.strip.empty?
    puts item # hit?
  end
end

Если вы хотите исключить элементы, которые не начинаются со ссылки, вы можете выбрать первого дочернего элемента ипроверьте своих родителей в состоянии:

list.search('li > a:first-child').each do |item|
  if !item.parent.children.first.text? || item.parent.children.first.text.strip.empty?
    puts item # hit?
  end
end
...