Wie kann ich Rubys Sanitize / Nokogiri den Zugriff auf nicht markierten Elemente verwenden?

StackOverflow https://stackoverflow.com/questions/3167809

  •  02-10-2019
  •  | 
  •  

Frage

Ich versuche, eine bauen Sanitize Transformator, der mit potenziell fehlerhaften HTML-Input akzeptiert Elemente außerhalb von irgendwelchen Tags überhaupt, wie in diesem Beispiel:

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

Ich mag den Transformator haben alle nicht-markierten Elemente in <p> Tags wickeln, so dass die obigen Transformationen in:

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

Leider kann ich nicht herausfinden, wie das nicht markierte Element zu wählen, weil es nicht ein Knoten ist. Ich bin sicher, ich bin hier fehlt etwas. Kann mir jemand in der richtigen Richtung einen Schub geben?

War es hilfreich?

Lösung

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>"

Der Text wird in Textknoten gespeichert. Da CSS kann nicht Textknoten auswählen, müssen Sie andere Methoden verwenden, um sie wie Nokogiri::XML::Node#children zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top