Подтвердить что ты не робот

Есть ли простой способ снять HTML из QString в Qt?

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

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

Стало бы:

Test: A test case

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

4b9b3361

Ответ 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.