2010-02-01 4 views
16

Qt에서 잘못된 html로 가득 찬 페이지에서 "html"html 태그를 모두 파싱하는 방법은 무엇입니까?Qt에서 HTML을 구문 분석하는 가장 좋은 방법은 무엇입니까?

+1

HTML에 대한 나쁜 점에 대해 자세히 설명해 줄 수 있습니까? 정기적으로 좋지 않습니까, 아니면 완전히 쓰레기입니까? HTML을 생성하는 것을 고칠 수는 없습니까? – Bill

+2

regex를 사용하지 마십시오 ... http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Malfist

+1

Google 검색, Google의 HTML입니다. 끔찍해. 이 문서를 HTML5로 확인하는 중 오류가 발생했습니다! 결과 : \t 50 오류, 16 경고 – y2k

답변

18

내장 QtWebKit을 사용합니다. 성능면에서 어떻게되는지 모르지만 모든 "나쁜"HTML을 잡아야한다고 생각합니다. 같은 뭔가 :

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 
    } 
} 

당신이 컬렉션 원하는대로 할 다음 클래스를

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

을 사용합니다.

+1

이걸 정리하고 작동하지 않아 ... 페이지가로드 될 때까지 기다려야합니까? – y2k

+1

@ JOSHUA : loadFinished (bool) 신호가 나타날 때까지 기다리는 것이 좋습니다. (http://doc.trolltech.com/4.6/qwebview.html#loadFinished) – Bill

6


이 질문은 이미 오래되었습니다. 그럼에도 불구하고 나는 이것이 누군가를 도울 수 있기를 바란다.

내가 sourceforge로 출판 한 Qt를위한 두 개의 작은 클래스를 썼다. 이렇게하면 XML에서 사용되는 HTML 파일에 액세스하는 데 도움이됩니다. 여기
http://sourceforge.net/projects/sgml-for-qt/
당신이 위키 도움말 시스템을 확인할 수있는 것들 :

여기에서 프로젝트를 찾을 수 있습니다.

드류 (Drewle)

관련 문제