2011-03-22 29 views
8

Estoy desarrollando una aplicación web utilizando Scala y Lift Framework. Tengo registro de base de datos que contiene Perex HTML de la páginaPele las etiquetas HTML de Scala String

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

Y en un escenario que necesito para imprimir a este usuario Perex, pero sin etiquetas HTML.

Hi all, this is perex 

¿Se puede hacer esto en Scala? Porque traté de mirar con Google, pero sin éxito.

gracias por todas las respuestas.

Respuesta

8

Si la cadena es XML válido entonces usted puede utilizar:

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

Si no es XML válido, entonces se puede utilizar scala.util.matching.Regex o una biblioteca de análisis de HTML como http://jsoup.org/

+0

estoy usando su solución en este momento y parece que funciona. Tuve que ajustar mi String a la etiqueta para que funcione incluso con la cadena "Hi name". Muchas gracias. – kajo

+4

Prefiero usar 'scala.xml.parsing.XhtmlParser' para analizar el HTML. Mejor oportunidad de analizarlo correctamente. –

0

La mejor solución que 'Encontré fue utilizar cyberneko para analizar su cadena y hacer algo de manejo de eventos SAX "inteligente".

cyberneko analizará el código HTML, incluso si no es válido, que es el caso de la gran mayoría del HTML que es probable que encuentre en la naturaleza.

Si se registra una costumbre ContentHandler que esencialmente ignora todos menos los character eventos y simplemente anexar los que un constructor de cadena, que obtendrá una buena primera aproximación, con un defecto molesto: las palabras separadas por un elemento de bloque va a terminar concatenado (for<br/>example =>forexample).

Una mejor solución es obtener una lista de todos los elementos de bloque, y tener su ContentHandler escuchar startElement eventos. Si el elemento es de bloque uno, solo agregue un carácter de espacio a su creador de cadenas.

Tenga en cuenta que si bien esto parece funcionar bien, puede que no sea perfecto para su caso de uso. <br/> no se convierte, por ejemplo, en un salto de línea. Sin embargo, no debería ser demasiado trabajo agregar esto si es necesario.

0

TagSoup debe cumplir con su requisito para analizar un archivo html del mundo real.

dependencias de SBT,

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

código de ejemplo, el uso

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) 
Cuestiones relacionadas