0

我尝试从 Qt 中的网页获取一些数据。由于QWebKit 未维护,我想使用QXmlStreamReader它,但我收到一些网页的错误消息。

例如:XML Parse Error "Opening and ending tag mismatch."http://www.google.com

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.de/?gfe_rd=cr&amp;ei=toP_WMrVKoHKXuvxnsAO">here</A>.
</BODY></HTML>

我得到HTML,HEAD和.metaTITLE

有效 html 页面上的其他错误消息:

  • XML 解析错误“预期为 '-' 或 'DOCTYPE',但得到了 '[a-zA-Z]'。”
  • XML 解析错误“未声明实体 'raquo'。”

这是我的代码:

webpage = new QXmlStreamReader(data);

//emit got_webpage(&QString(data));

QStringList test;

while (!webpage->atEnd() && !webpage->hasError())
{
    QXmlStreamReader::TokenType token = webpage->readNext();

    if (token == QXmlStreamReader::StartDocument)
        continue;

    if (token == QXmlStreamReader::StartElement)
    {
        test << webpage->name().toString();
        /*if (webpage->name() == "H1")
        {
            emit got_webpage(webpage)
        }*/
    }
}

emit got_webpage(&test.join("\n"));

if (webpage->hasError())
{
    // TODO: Error handling...
    qDebug() << "XML Parse Error " << webpage->errorString();
}

webpage->clear();
delete webpage;
4

1 回答 1

0

顾名思义,QXmlStreamReader就是用来解析 XML 的。HTML 不是基于 XML,因此无法使用QXmlStreamReader.

也就是说,如果您可以将 HTML 转换为XHTML,您将能够使用QXmlStreamReader. 但是,Qt 没有执行这种转换的内置方法。可以使用tidylib等 3rd 方库将任意 HTML 转换为 XHTML 。

于 2017-04-25T19:53:39.097 回答