Уберите HTML-теги из строки Scala - PullRequest
9 голосов
/ 22 марта 2011

Я занимаюсь разработкой веб-приложения с использованием Scala и Lift Framework. У меня есть запись в БД, которая содержит html perex страницы

<b>Hi all, this is perex</b>

И в одном сценарии мне нужно напечатать пользователю этот perex, но без тегов html.

Hi all, this is perex

Возможно ли это сделать в Scala? Потому что я пытался искать в Google, но безуспешно.

спасибо за все ответы.

Ответы [ 3 ]

8 голосов
/ 22 марта 2011

Если строка является допустимым XML, то вы можете использовать:

scala.xml.XML.loadString("<b>Hi all, this is parex</b>").text

Если это недопустимый XML, то вы можете использовать scala.util.matching.Regex или библиотеку HTML для разбора, например http://jsoup.org/

0 голосов
/ 17 июля 2017

TagSoup должен соответствовать вашему требованию для анализа реального HTML-файла.

sbt-зависимостей,

libraryDependencies += "org.ccil.cowan.tagsoup" % "tagsoup" % "1.2.1"

Пример кода,

object TagSoupXmlLoader {

  private val factory = new SAXFactoryImpl()

  def get(): XMLLoader[Elem] = {
    XML.withSAXParser(factory.newSAXParser())
  }
}

использование,

val root = TagSoupXmlLoader.get().load("http://www.google.com")
println(root)
0 голосов
/ 04 января 2016

Лучшим решением, которое я нашел, было использование cyberneko для анализа вашей строки и некоторой "умной" обработки событий SAX.

cyberneko проанализирует ваш HTML, даже если он недействителен,это имеет место для подавляющего большинства HTML, с которым вы, вероятно, столкнетесь в дикой природе.

Если вы зарегистрируете пользовательский ContentHandler, который по существу игнорирует все, кроме событий character, и просто добавляете их кпостроитель строк, вы получите хорошее первое приближение с досадным недостатком: слова, разделенные блочным элементом, будут конкатенированы (for<br/>example => forexample).

Лучшее решение -получить список всех элементов блока и прослушать ContentHandler события startElement.Если элемент является блочным, просто добавьте символ пробела к строителю строки.

Обратите внимание, что, хотя это, кажется, работает нормально, оно может не подойти для вашего варианта использования.Например, <br/> не превращается в разрыв строки.Впрочем, добавить его, если это необходимо, не должно быть слишком много.

...