2010-05-09 47 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

相關問題