C++ XML解析器QT - 不能正常工作

问题描述:

以下是我的代码& 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

你应该实例化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