Может ли Nokogiri использовать синтаксический анализатор SAX для разбора HTML-фрагмента?
Вопрос
У меня есть этот код.
class MyParser < Nokogiri::XML::SAX::Document
def characters(string)
LOG.debug("characters #{string}")
end
def start_element(name, attrs = [])
LOG.debug("start_element #{name}")
end
def end_element(name)
LOG.debug("end_element #{name}")
end
end
parser = Nokogiri::HTML::SAX::Parser.new(MyParser.new)
parser.parse(File.new($*[0], 'rb'))
Запустите HTML-фрагмент, подобный этому,
<h1>Hello</h1>
<p>Hi.</p>
выходные данные показывают, что обработан только первый элемент:
start_element h1
characters Hello
end_element h1
Если я оберну фрагмент в html
и body
теги, весь ввод обрабатывается.
Есть ли способ использовать синтаксический анализатор в стиле SAX для фрагментов HTML?
Решение
Вам нужно обернуть свой фрагмент в корневой элемент:
<div>
<h1>Hello</h1>
<p>Hi.</p>
</div>
должно решить вашу проблему.
Не связан с StackOverflow