2010-05-09 14 views
21

Tengo un QString con algo de HTML en ella ... ¿hay una manera fácil de pelar el HTML de ella? Básicamente quiero solo el contenido de texto real.¿Hay alguna manera fácil de quitar HTML de un QString en Qt?

<i>Test:</i><img src="blah.png" /><br> A test case 

se convertiría en:

Test: A test case 

Tengo curiosidad por saber si Qt tiene una función de cadena o utilidad para esto.

Respuesta

11

Usted puede tratar de una iteración a través de la cadena mediante la clase QXmlStreamReader y extraer todo el texto (si cadena HTML está garantizado para ser XML bien formado).

Algo como esto:

QXmlStreamReader xml(htmlString); 
QString textString; 
while (!xml.atEnd()) { 
    if (xml.readNext() == QXmlStreamReader::Characters) { 
     textString += xml.text(); 
    } 
} 

pero estoy seguro de que su 100% ussage válida de API QXmlStreamReader ya lo he usado hace bastante tiempo longe y puede olvidar algo.

+0

Gracias. No estoy tratando de validarlo o extraerlo. Solo quiero deshacerme de eso. –

+0

Ah, y el texto que obtengo * es * de una fuente confiable (no como entrada del usuario) así que estaré bien. –

+0

¿quisiste decir 'textString' en lugar de' textStream'? –

34
QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case"; 
s.remove(QRegExp("<[^>]*>")); 
// s == "Test: A test case" 
+1

Esta respuesta no será suficiente para las cadenas con entidades HTML, p. < –

+1

El problema con esto, la parte superior de la cabeza, es que ''
consigue quitado en lugar de quedar convertido al carácter de nueva línea. – Marcus

+0

@Marcus Entonces, exactamente qué fue lo que preguntó la pregunta. Ninguno de los HTML se convierte en nada, eso es una solicitud totalmente diferente –

20

Si no se preocupan por el rendimiento que mucho después QTextDocument hace un muy buen trabajo de convertir HTML a texto sin formato.

QTextDocument doc; 
doc.setHtml(htmlString); 

return doc.toPlainText(); 

Sé que esta pregunta es antigua, pero estaba buscando una manera rápida y sucia de manejar HTML incorrecto. El analizador XML no estaba dando buenos resultados.

+0

Creo que esta es la mejor respuesta. Mantiene el formato básico como descansos. –

+3

Quizás una solución un poco mejor sería usar 'QTextDocumentFragment': ' QString plainText = QTextDocumentFragment :: fromHtml (htmlString) .toPlainText(); ' – Marcus

+0

Debe hacer que esta sea una respuesta real, en lugar de un comentario. La mejor solución, creo. –

0

la situación de que algunos html no son del todo validados xml empeora la resolución correcta.

Si es xml válido (o no está mal formateado), creo que QXmlStreamReader + QXmlStreamEntityResolver podría no ser una mala idea.

código

Muestra en: https://github.com/ycheng/misccode/blob/master/qt_html_parse/utils.cpp

(esto puede ser un comentario, pero todavía no tiene permiso para hacerlo)

-3

esta respuesta es para que lea este post más adelante y usar QT5 o temprano . simplemente escapa de los caracteres html usando las funciones incorporadas de la siguiente manera.

QString str="<h1>some hedding </h1>"; // a string containing html tags. 
QString esc=str.toHtmlEscaped(); //esc contains the html escaped srring. 
+0

No busco escapar de las etiquetas, deseo eliminarlas. –

+0

'QString :: toHtmlEscaped' no quita las etiquetas HTML.Simplemente convierte caracteres como '<', '>' etc., en códigos html. – Marcus

Cuestiones relacionadas