2010-05-09 52 views

回答

11

您可以尝试使用QXmlStreamReader类遍历字符串并提取所有文本(如果您的HTML字符串保证为格式正确的XML)。

事情是这样的:

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

,但我不能确定它的100%QXmlStreamReader API的有效ussage,因为我已经很寿命长的时间前使用它,可能会忘记一些东西。

+0

谢谢。我没有试图验证它或提取它。我只是想摆脱它。 – 2010-05-09 23:00:00

+0

哦,我得到的文本*是来自可信来源(不是用户输入),所以我应该没问题。 – 2010-05-09 23:01:35

+0

你是不是指'textString'而不是'textStream'? – 2012-08-25 14:31:20

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

这个答案不足以支持HTML实体的字符串,例如< – 2015-08-12 19:56:20

+1

这个问题,我的头顶,是'
'被删除,而不是转换为换行符。 – Marcus 2017-03-24 19:40:29

+0

@Marcus正是这个问题所要求的。没有一个HTML被转换成任何东西,这是一个完全不同的请求 – 2017-10-01 04:42:45

20

如果你不关心性能这么多,然后QTextDocument确实将HTML转换为纯文本的一个不错的工作。

QTextDocument doc; 
doc.setHtml(htmlString); 

return doc.toPlainText(); 

我知道这个问题是旧的,但我正在寻找一个快速和肮脏的方式来处理不正确的HTML。 XML解析器没有给出好的结果。

+0

我认为这是最好的答案。它保持基本的格式,如休息。 – 2015-11-12 12:34:27

+3

也许稍微好一点的解决方案是使用'QTextDocumentFragment': 'QString plainText = QTextDocumentFragment :: fromHtml(htmlString).toPlainText();' – Marcus 2017-03-24 19:43:53

+0

你应该让这是一个真正的答案,而不是评论。我想最好的解决方案。 – 2018-01-25 14:29:28

-3

这个答案是谁后阅读这篇文章,并使用QT5或更高版本。只需使用下面的内置函数来转义html字符即可。

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

我不想逃避标签,我想删除它们。 – 2015-09-22 20:22:11

+0

'QString :: toHtmlEscaped'不会去除html标签。只需将“<', '>”等字符转换为html代码即可。 – Marcus 2017-03-24 19:36:38

相关问题