2010-12-17 25 views
1

以下是我的代碼& xml文件。我正在嘗試讀取一個xml文件並存儲內容。但它不工作。請幫助C++ XML解析器QT - 不能正常工作

int ParseConfigFile::populateUserValues (string &OS, string &dir, string &logPath) 
{ 
    QDomDocument doc; 
    QDomElement element; 

    QFile file("config_v1.xml"); 

    if (doc.setContent(file.readAll()) == false) 
     return 1; 

    element = doc.documentElement(); 

    QDomNodeList list = element.childNodes(); 
    QDomElement firstChild = list.at(0).toElement(); // will return the first child 
    QDomElement secondChild = list.at(1).toElement(); 
    QDomElement thirdChild = list.at(2).toElement(); 


    QString s1,s2,s3; 
    s1 = firstChild.text(); 
    s2 = secondChild.text(); 
    s3 = thirdChild.text(); 

    OS = s1.toStdString(); 
    dir = s2.toStdString(); 
    logPath = s3.toStdString(); 

    return 0; 
} 

和我的XML

<?xml version="1.0"?> 
<config> 
    <type>LINUX</type> 
    <dir>/home/</dir> 
    <path>/var/log/</path> 
</config> 
+1

什麼是你的錯誤?此外,這不是解析xml的好方法。只要您在xml中更改順序,您的代碼就會發出錯誤的值。 – ZeissS 2010-12-17 15:41:33

+0

我沒有得到任何輸出,即NULL。你能否建議我哪一種解析方法最好?我是XML的新手。 – Allwyn 2010-12-17 15:47:40

回答

1

你應該實例化QDomDocument這樣的,然後你的代碼將工作:

if (doc.setContent(&file) == false) 
     return 1; 

QDomDocument可以與IO設備使用(就像一個QFile )使這成爲從文件中設置QDomDocument內容的最佳方式。

無論如何,如果你試圖寫一個配置文件,讀/寫,我建議你堅持和QSettings

QSettings settings("MyCompany", "MyApp"); 
QString s1,s2,s3; 
s1 = settings.value("type").toString(); 
s2 = secondChild..value("dir").toString(); 
s3 = thirdChild..value("path").toString(); 

配置文件格式無法XML(這將是關鍵=值),但你幾乎不需要擔心文件本身。要設置該文件的任何值也很容易:

QSettings settings("MyCompany", "MyApp"); 
settings.setValue("path", "/var/log/"); 

您的配置文件將是這樣的:

[General] 
path=/var/log/ 

參見:QSettings documentation

+0

QSetting是什麼意思? – Allwyn 2010-12-17 16:07:39

+0

@Winbros - QSettings是一個可以幫助您讀取和寫入配置文件的類。它非常易於使用,它會將配置文件保存在程序運行的平臺上的相應用戶文件夾中(例如,Windows上的Users/me/Application Data/myApp和Linux上的home/me/.config/myApp)http: //doc.troll.no/4.7/qsettings.html – Raphael 2010-12-17 16:10:49

+0

剛剛編輯答案你可以看到這將如何完成與QSettings – Raphael 2010-12-17 16:16:48