2010-02-01 19 views
16

Wie würde ich gehen, um alle "a" HTML-Tags "href" -Eigenschaften auf einer Seite voller BAD html in Qt zu analysieren?Beste Art, HTML in Qt zu analysieren?

+1

Können Sie das konkretisieren, was über die HTML schlecht ist? Ist es regelmäßig schlecht oder ist es Müll? Sie können nicht reparieren, was den HTML produziert? – Bill

+2

nicht regex verwenden ... http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contented-tags/1732454#1732454 – Malfist

+1

Es ist eine Google-Suche, Google HTML ist furchtbar. Fehler beim Überprüfen dieses Dokuments als HTML5! Ergebnis: \t 50 Fehler, 16 Warnung (en) – y2k

Antwort

18

Ich würde das eingebaute QtWebKit verwenden. Ich weiß nicht, wie es in Bezug auf die Leistung funktioniert, aber ich denke, es sollte alles "schlechte" HTML fangen. Etwas wie:

class MyPageLoader : public QObject 
{ 
    Q_OBJECT 

public: 
    MyPageLoader(); 
    void loadPage(const QUrl&); 

public slots: 
    void replyFinished(bool); 

private: 
    QWebView* m_view; 
}; 

MyPageLoader::MyPageLoader() 
{ 
    m_view = new QWebView(); 

    connect(m_view, SIGNAL(loadFinished(bool)), 
      this, SLOT(replyFinished(bool))); 
} 

void MyPageLoader::loadPage(const QUrl& url) 
{ 
    m_view->load(url); 
} 

void MyPageLoader::replyFinished(bool ok) 
{ 
    QWebElementCollection elements = m_view->page()->mainFrame()->findAllElements("a"); 

    foreach (QWebElement e, elements) { 
    // Process element e 
    } 
} 

die Klasse verwenden

MyPageLoader loader; 
loader.loadPage("http://www.example.com") 

und dann tun, was Sie mit der Sammlung mögen.

+1

Ich habe das aufgeräumt und es hat nicht funktioniert ... muss ich warten, bis die Seite geladen ist oder so? – y2k

+1

@JOSHUA: Ich würde empfehlen zu warten, bis Sie das loadFinished (bool) -Signal bekommen, ja. (http://doc.trolltech.com/4.6/qwebview.html#loadFinished) – Bill

6


Diese Frage ist schon ziemlich alt. Trotzdem hoffe ich, dass dies jemandem hilft:

Ich habe zwei kleine Klassen für Qt geschrieben, die ich unter sourceforge veröffentlicht habe. Dies wird Ihnen helfen, auf eine HTML-Datei zuzugreifen, die mit XML vergleichbar ist.

Hier finden Sie das Projekt finden:
http://sourceforge.net/projects/sgml-for-qt/
Hier finden Sie eine Hilfe-System im Wiki finden.

Drewle