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

Posted

技术标签:

【中文标题】QDomDocument 无法使用 <!doctype> 标签设置 HTML 文档的内容【英文标题】:QDomDocument fails to set content of an HTML document with <!doctype> tag 【发布时间】:2012-08-08 17:11:21 【问题描述】:

当我将QDomDocument 用于html 内容时,如果文档开头有&lt;!doctype html&gt;,则无法设置内容。但实际上为什么呢?! 例如考虑下面的sn-p代码:

 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();

这段代码的输出只有falses 的列表!

【问题讨论】:

【参考方案1】:

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

如需更多信息,请参阅Qt Webkit documentation 和QWebElement documentation。

【讨论】:

感谢您的回复。我认为 Webkit 是我要使用的。但无论如何,HTML 只不过是 xml 的一个子集,带有预定义的标签名称!而且我没有,除了 xml 解析器无法解析 HTML!【参考方案2】:

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

【讨论】:

我也试过了,但是调用setContent()后错误的QStringList还是空的! 您是否尝试过使用 DOCTYPE 而不是 doctype?顺便说一句,你使用的是什么版本的 Qt?

以上是关于QDomDocument 无法使用 <!doctype> 标签设置 HTML 文档的内容的主要内容,如果未能解决你的问题,请参考以下文章

QT 使用QDomDocument::setContent()读XML文件总是返回false

QDomDocument 读取和编辑xml文件

关于Qt 报QDomDocument: No such file or directory错误解决办法

Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件

创建xml文件

39XML文档类