有没有一种简单的方法可以从Qt中的QString中删除HTML?

Nat*_*man 27 html qt strip

我有一个带有一些HTML的QString ...是否有一种简单的方法可以从中删除HTML?我基本上只想要实际的文本内容.

<i>Test:</i><img src="blah.png" /><br> A test case
Run Code Online (Sandbox Code Playgroud)

会成为:

Test: A test case
Run Code Online (Sandbox Code Playgroud)

我很想知道Qt是否有字符串函数或实用程序.

k06*_*06a 35

QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case";
s.remove(QRegExp("<[^>]*>"));
// s == "Test: A test case"
Run Code Online (Sandbox Code Playgroud)

  • 从头到尾,问题在于```被删除而不是转换为换行符. (2认同)

Vis*_*nda 26

如果你不关心性能,那么QTextDocument将HTML转换为纯文本就可以了.

QTextDocument doc;
doc.setHtml( htmlString );

return doc.toPlainText();
Run Code Online (Sandbox Code Playgroud)

我知道这个问题很老,但我一直在寻找一种快速而肮脏的方法来处理错误的HTML.XML解析器没有给出好的结果.

  • 也许一个稍微好一点的解决办法是使用`QTextDocumentFragment`:`QString的明文= QTextDocumentFragment :: fromHtml(htmlString).toPlainText();` (6认同)
  • 您应该做出一个真正的答案,而不是评论。我认为最好的解决方案。 (3认同)

Ves*_*niK 13

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

像这样的东西:

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

但是我不确定它是QXmlStreamReader API的100%有效的消息,因为我很久以前就已经使用它了,可能会忘记一些东西.