Найти атрибуты с префиксным именем атрибута - PullRequest
0 голосов
/ 11 декабря 2018

У меня html выглядит так:

<div in-prop in-alias="" in-type="teacher"><div in-name="Alice">Hello <i in-name="Wonderland">World</i></div></div>

Я хочу собирать имена пользовательских атрибутов на основе префикса in- имя атрибута, у меня есть рабочий код и возвращается ["prop", "alias", "type", "name", "name"]

require 'nokogiri'

class PartB
  def get_scheme(html)
    get_doc(html).map { |elm|
      elm.attributes.map{|k, v| k.gsub("in-", "") if !k.nil? && k.include?("in-")}
    }.flatten.compact
  end

  def get_doc(html)
    Nokogiri::HTML(html).search('*')
  end
end

, но я думаю, что это избыточно, потому что я использую search('*'), и он получит все HTML-теги.Есть ли способ сделать это?

1 Ответ

0 голосов
/ 11 декабря 2018
doc = Nokogiri::HTML('<div in-prop in-alias="" in-type="teacher"><div in-name="Alice">Hello <i in-name="Wonderland">World</i></div></div>')

a = doc.xpath("//@*[starts-with(name(), 'in')]")

a.map { |i| i.name[3..-1] }  # => ["prop", "alias", "type", "name", "name"]
...