QDomDocument не может установить содержимое документа HTML с тегом <! Doctype>
Когда я использую QDomDocument
с содержимым HTML, он не может установить содержимое, если есть <!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();
ничего, кроме списка false
s вывод этого кода!
2 ответа
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 и документацию QWebElement.
Используйте необязательные аргументы для setContent
выяснить, что такое ошибка синтаксического анализа. Это может быть что-то простое, как в случае с "doctype".