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 内容时,如果文档开头有<!doctype html>
,则无法设置内容。但实际上为什么呢?!
例如考虑下面的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();
这段代码的输出只有false
s 的列表!
【问题讨论】:
【参考方案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
关于Qt 报QDomDocument: No such file or directory错误解决办法
Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件