【问题标题】:QDomDocument fails to set content of an HTML document with <!doctype> tagQDomDocument 无法使用 <!doctype> 标签设置 HTML 文档的内容
【发布时间】: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 的列表!

【问题讨论】:

    标签: qt dom html-parsing doctype qtxml


    【解决方案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 documentationQWebElement documentation

    【讨论】:

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

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

    【讨论】:

    • 我也试过了,但是调用setContent()后错误的QStringList还是空的!
    • 您是否尝试过使用 DOCTYPE 而不是 doctype?顺便说一句,你使用的是什么版本的 Qt?
    猜你喜欢
    • 2013-04-27
    • 2015-11-24
    • 2015-02-21
    • 1970-01-01
    • 2012-07-04
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多