2012-03-08 113 views
2

我正在使用QDomDocument解析Qt中的XML文件。這樣做的代碼如下:QDomDocument:解析元素時發生錯誤

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "", tr("(*.xml)")); 

QDomDocument domDocument; 

try { 
    QString qs; 
    int y,j; 
    if (!domDocument.setContent(fileName, false, &qs, &y, &j)) 
    { 
     cout << "error: " << qs.toStdString() << " " << y << " " << j << endl; 
     return; 
    } 
} catch (...) 
    { 
     //handle error 
    } 

我與getOpenFileName打開的文檔包含以下內容:

<list> 
    <list_name>List1</list_name> 
    <task> 
     <task_name>Task1a</task_name> 
     <task_due_date></task_due_date> 
     <task_note></task_note> 
    </task> 
    <task> 
     <task_name>Task1b</task_name> 
     <task_due_date></task_due_date> 
     <task_note></task_note> 
    </task> 
</list> 

調用setContent()返回false,導致下面的消息是印:

error: error occurred while parsing element 1 1

我想不通是什麼問題導致發生此錯誤。任何幫助,將不勝感激。

回答

2

沒有接受文件名的QDomDocument::setContent方法。恕我直言,你誤解了以下方法:http://qt-project.org/doc/qt-4.8/qdomdocument.html#setContent-5。您的代碼嘗試解析文件名字符串。

使用一個QFile對象,而不是:

QFile file(fileName); 

if (file.open(QIODevice::ReadOnly)) { 
    QDomDocument domDocument; 

    QString errorStr; 
    int errorLine; 
    int errorColumn; 

    if (!domDocument.setContent(&file, false, &errorStr, &errorLine, &errorColumn)) 
     qDebug() << errorStr << errorLine << errorColumn; 
} 
+0

哇。愚蠢的錯誤。感謝您指出了這一點。 – finiteloop 2012-03-08 22:57:29

相關問題