QDomDocument无法使用<!doctype>标记设置HTML文档的内容

Ali*_*ian 5 doctype qt dom html-parsing qtxml

当我使用QDomDocumentHTML内容时,如果<!doctype html>文档开头有,它将无法设置内容。但是为什么呢?例如,考虑以下代码片段:

 QDomDocument doc;
 QString content = "<!doctype html><html><body><a href='bar'>foo</a></body></html>";
 qDebug() << doc.setContent(content,false,0,0);
 QDomElement docElem = doc.documentElement();
 QDomNode a = docElem.firstChild();
 qDebug() << doc.childNodes().size() << docElem.childNodes().size();
Run Code Online (Sandbox Code Playgroud)

false该代码的输出仅是s 的列表!

air*_*dex 6

HTML是HTML,XML是XML。因此,Qt XML无法正确解析HTML代码。要解析HTML文件,请考虑使用Qt Webkit模块而不是Qt XML模块。要将其包括在项目中,只需添加QT += webkit项目文件即可。

要解析HTML数据,您将必须执行以下操作:

QString content = "<html><body><a href='bar'>foo</a></body></html>";
QWebPage webPage;
QWebFrame * frame = webPage.mainFrame();
frame->setHtml(content);
QWebElement htmlElement = frame->documentElement();    // Equivalent of the QDomElement
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参见Qt Webkit文档QWebElement文档


Tro*_*our 0

使用可选参数来setContent找出解析错误是什么。它可能像“doctype”的情况一样简单。