2015-01-28 10 views
0

XML 파일을 서버에 다운로드하고 파일의 내용을 읽으려는 Qt 응용 프로그램이 있습니다. 불행히도 다운로드 한 파일의 내용을 QDomDocument (으)로 가져올 수 없습니다.QtNetwork : xml 파일을 다운로드하고 해당 내용을 읽습니다.

이것은 내가

QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(fileIsReady(QNetworkReply*))); 
manager->get(QNetworkRequest(QUrl("http://example.com/file.xml"))); 


fileIsReady(QNetworkReply *reply){ 

    QTemporaryFile tempFile; 
    if(tempFile.open()){ 
     tempFile.write(reply->readAll()); 
     QDomDocument versionXML; 
     QDomElement root; 

     if(!versionXML.setContent(&tempFile)){ 
      qDebug() << "failed to load version file" << endl; 
     } 
     else{ 
      root=versionXML.firstChildElement(); 
      //... 
     } 

    } 

} 

가 어떻게 이것을 달성 할 수있는 시도 무엇인가?

+0

콘텐츠를 설정하기 전에 데이터를 플러시하고 0으로 되돌아 가도록하십시오. – alediaferia

+0

QDomDocument :: setContent (QIODevice * dev, bool namespaceProcessing, QString * errorMsg = 0, int * errorLine = 0, int * errorColumn = 0)은 실제 오류 메시지를 쉽게 알 수있는 방법을 제공합니다 ... – alediaferia

+0

@ alediaferia 당신이 데이터를 내뿜어 당신이 무슨 뜻인지 말해 줄래? – testus

답변

1

Qt를 처음 사용할 때 스트리밍 인터페이스를 사용하기가 약간 어렵다고 생각합니다. RAM에 꼭 맞는 아주 큰 다운로드가 없다면 QByteArray를 사용하십시오.

fileIsReady(QNetworkReply *reply){ 
    QByteArray data = reply->readAll(); 
    qDebug() << "XML download size:" << data.size() << "bytes"; 
    qDebug() << QString::​fromUtf8(data); 

    QDomDocument versionXML; 

    if(!versionXML.setContent(data)) 
    { 
     qWarning() << "Failed to parse XML"; 
    } 

    // ... 
} 
+0

시도했지만 ** XML 다운로드 크기 : 226 바이트 매번 출력으로 QML **을 파싱하지 못했습니다. 존재하지 않는 파일에 링크해도 동일한 XML 다운로드 크기를 얻습니다. 'manager-> get (QNetworkRequest (QUrl ("http://example.com/file.xml")));)의 첫 번째 부분이 맞습니까? – testus

+0

좋습니다. 다음 226 바이트가 무엇인지보십시오. 내 편집 된 답변보기 –

+0

** 사용할 수 없습니다!

사용할 수 없습니다!

요청한 리소스를 적절하게 표현한 것을이 서버에서 찾을 수 없습니다. 이 오류는 Mod_Security에 의해 생성되었습니다.

** 동일한 링크를 복사하는 경우 웹 브라우저에서'manager'를 입력하면 XML 파일이 보입니다. – testus