Как я могу использовать Ruby's Sanitize / Nokogiri для доступа к непомеченным элементам? - PullRequest
1 голос
/ 02 июля 2010

Я пытаюсь создать Sanitize преобразователь, который принимает потенциально искаженный ввод HTML с элементами вне каких-либо тегов вообще, как в этом примере:

out of a tag<p>in a tag</p>out again!

Я хочу, чтобы преобразователь обернул любые теговые элементы в теги <p>, чтобы приведенное выше преобразовалось в:

<p>out of a tag</p><p>in a tag</p><p>out again!</p>

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

1 Ответ

1 голос
/ 02 июля 2010
require 'nokogiri'

html = 'out of a tag<p>in a tag</p>out again!'

Nokogiri::HTML(html).at_css('body').children.
  map {|x| '<p>' + x.text + '</p>' }.join('')
#=> "<p>out of a tag</p><p>in a tag</p><p>out again!</p>"

Текст хранится в текстовых узлах.Поскольку CSS не может выбирать текстовые узлы, вам придется использовать другие методы, чтобы получить их, например Nokogiri::XML::Node#children.

...