Есть ли простой способ удалить HTML из QString в Qt?

у меня есть QString с некоторым HTML в нем... есть ли простой способ удалить HTML из него? Я в основном хочу только фактический текстовый контент.

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

станет:

Test: A test case

мне любопытно узнать, есть ли у Qt строковая функция или утилита для этого.

5 ответов


вы можете попытаться перебрать строку с помощью класса QXmlStreamReader и извлечь весь текст (если HTML-строка гарантирована как хорошо сформированный XML).

что-то вроде этого:

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

но я не уверен, что его 100% действительный ussage API QXmlStreamReader, так как я использовал его довольно давно и могу что-то забыть.


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

Если вы не заботитесь о производительности, то QTextDocument делает довольно хорошую работу по преобразованию HTML в обычный текст.

QTextDocument doc;
doc.setHtml( htmlString );

return doc.toPlainText();

Я знаю, что этот вопрос старый, но я искал быстрый и грязный способ обработки неправильного HTML. Синтаксический анализатор XML не давал хороших результатов.


ситуация, что некоторые html не совсем проверить xml сделать его хуже, чтобы правильно работать.

Если это допустимый xml (или не слишком плохо сформированный), я думаю, что QXmlStreamReader + QXmlStreamEntityResolver может быть неплохой идеей.

пример кода в:https://github.com/ycheng/misccode/blob/master/qt_html_parse/utils.cpp

(Это может быть комментарий, но у меня все еще нет разрешения на это)


этот ответ предназначен для тех, кто читает этот пост позже и использует Qt5 или позже. просто избежать символов html, используя встроенные функции, как показано ниже.

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