Есть ли простой способ снять HTML из QString в Qt?
У меня есть QString с некоторым HTML в нем... есть ли простой способ удалить из него HTML? Я в основном хочу только фактическое текстовое содержимое.
<i>Test:</i><img src="blah.png" /><br> A test case
Стало бы:
Test: A test case
Мне любопытно узнать, есть ли у Qt строковая функция или утилита для этого.
Ответы
Ответ 1
Вы можете попытаться выполнить итерацию строки с помощью класса QXmlStreamReader и извлечь весь текст (если ваша строка HTML гарантируется, что она хорошо сформирована XML).
Что-то вроде этого:
QXmlStreamReader xml(htmlString);
QString textString;
while (!xml.atEnd()) {
if ( xml.readNext() == QXmlStreamReader::Characters ) {
textString += xml.text();
}
}
но я не уверен, что его 100% -ное действительное использование QXmlStreamReader API, так как я использовал его довольно давно и может что-то забыть.
Ответ 2
QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case";
s.remove(QRegExp("<[^>]*>"));
// s == "Test: A test case"
Ответ 3
Если вы не заботитесь о производительности, то QTextDocument
выполняет довольно хорошую работу по преобразованию HTML в обычный текст.
QTextDocument doc;
doc.setHtml( htmlString );
return doc.toPlainText();
Я знаю, что этот вопрос старый, но я искал быстрый и грязный способ обработки неправильного HTML. Парсер XML не давал хороших результатов.
Ответ 4
ситуация, когда какой-то html не совсем проверяет xml, ухудшает работу.
Если это допустимый xml (или не слишком плохо сформированный), я думаю, что QXmlStreamReader + QXmlStreamEntityResolver может быть не плохой идеей.
Пример кода в: https://github.com/ycheng/misccode/blob/master/qt_html_parse/utils.cpp
(это может быть комментарий, но у меня все еще нет разрешения на это)
Ответ 5
этот ответ для тех, кто прочитал это сообщение позже и использовал Qt5 или новее. просто выйдите из html-символов, используя встроенные функции, как показано ниже.
QString str="<h1>some hedding </h1>"; // a string containing html tags.
QString esc=str.toHtmlEscaped(); //esc contains the html escaped srring.