2013-12-19 4 views
1

Я разместил вопрос ниже, пытаясь использовать классы QDomDocument. Мне было рекомендовано использовать QWebkit вместо этого, но я очень смущен, как делать то, что мне нужно делать с QWebkit. Я никогда не использовал его раньше, поэтому я не уверен в этом. Может ли кто-нибудь предложить какие-либо советы? Благодаря! Для записи функция использует QByteArray, которая при преобразовании в текст является стандартным HTML-файлом.Использование QWebkit для извлечения div с определенным классом


ORIGINAL ВОПРОС:

У меня есть несколько дивы в HTML-файл с различными классами, например:

<div class='A'>...</div> 
<div class='B'>...</div> 
<div class='C'>...</div> 

У меня есть программа Qt (4.7) где мне нужно быть в состоянии чтобы получить определенный div из этого, основанный на классе. Мне нужно использовать QDomDocument в этой программе. Я знаю из документации, что у этого класса есть функция elementById(), но я не могу получить это для работы с классами, просто ids. Это не файл HTML, сделанный или что-то еще, поэтому я не имею никакого контроля над его классом или идентификатором. Есть ли способ сделать это, что мне не хватает? Благодаря!

ответ

2

.pro

QT += webkitwidgets 

main.cpp

#include <QApplication> 
#include <QDebug> 
#include <QWebView> 
#include <QWebFrame> 
#include <QWebElement> 

int main(int argc, char *argv[]) { 
    QApplication a(argc, argv); 

    QString l_html("<html><body>" 
        "<div class='A'>div with class A</div>" 
        "<div class='B'>div with class B</div>" 
        "<div class='C'>div with class C</div>" 
        "<span class='A'>span with class A</span>" 
        "</body></html>"); 

    QWebView l_webView; // you can skip the QWebView if you dont want to show any widget 
    l_webView.page()->mainFrame()->setHtml(l_html); 
    QWebElement l_root(l_webView.page()->mainFrame()->documentElement()); 
    QWebElementCollection l_elements(l_root.findAll(".a")); 

    foreach (QWebElement l_e, l_elements) { 
     // do what you want here 
    } 

    return a.exec(); 
} 
+0

Спасибо, я попытался это, но QWebElementCollection l_elements держит не возвращая ничего :(Есть еще arguement для FindAll(), который может работайте лучше? – thnkwthprtls

+0

@thnkwthprtls Код, который я дал, работает, просто поставьте 'qDebug() << l_e.toOuterXml();' внутри этого foreach, и вы увидите. О «другом аргументе» вы можете положить w который вам нужен. –

+0

О, хорошо, это часть, которую я делал неправильно, я неправильно понял значение параметра findAll, похоже, что он работает сейчас. Благодаря! – thnkwthprtls

Смежные вопросы