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

ничего, кроме списка falses вывод этого кода!

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".

Другие вопросы по тегам