代码之家  ›  专栏  ›  技术社区  ›  Nathan Osman

有没有一种简单的方法可以从qt中的qstring中剥离html?

  •  26
  • Nathan Osman  · 技术社区  · 14 年前

    我有一个qstring,里面有一些html…有没有一种简单的方法可以从中去掉html?我基本上只想要实际的文本内容。

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

    会变成:

    Test: A test case
    

    我很想知道qt是否有一个字符串函数或实用程序。

    5 回复  |  直到 14 年前
        1
  •  12
  •   VestniK    12 年前

    可以尝试使用qxmlstreamreader类遍历字符串并提取所有文本(如果保证html字符串是格式良好的xml)。

    像这样的:

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

    但我不确定它是否100%有效地使用了qxmlstreamreader api,因为我已经使用它很久了,可能会忘记一些事情。

        2
  •  35
  •   k06a    13 年前
    QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case";
    s.remove(QRegExp("<[^>]*>"));
    // s == "Test: A test case"
    
        3
  •  24
  •   Vishesh Handa    12 年前

    如果你不太在乎表演的话 QTextDocument 把html转换成纯文本做得很好。

    QTextDocument doc;
    doc.setHtml( htmlString );
    
    return doc.toPlainText();
    

    我知道这个问题已经过时了,但我一直在寻找一种快速而肮脏的方法来处理不正确的html。XML解析器没有给出好的结果。

        4
  •  0
  •   user1676531    9 年前

    一些html不能很好地验证xml,这使得正确地处理xml变得更糟。

    如果它是有效的XML(或者格式不是太差),我认为QxmlStreamReader+QxmlStreamEntityResolver可能不是个好主意。

    示例代码: https://github.com/ycheng/misccode/blob/master/qt_html_parse/utils.cpp

    (这可以是评论,但我仍然没有这样做的权限)

        5
  •  -3
  •   danial weaber    9 年前

    这个答案是给那些稍后阅读并使用qt5或更高版本的人的。只需使用下面的内置函数转义html字符。

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