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>
你应该实例化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/
QSetting是什么意思? – Allwyn 2010-12-17 16:07:39
@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
刚刚编辑答案你可以看到这将如何完成与QSettings – Raphael 2010-12-17 16:16:48
什么是你的错误?此外,这不是解析xml的好方法。只要您在xml中更改顺序,您的代码就会发出错误的值。 – ZeissS 2010-12-17 15:41:33
我没有得到任何输出,即NULL。你能否建议我哪一种解析方法最好?我是XML的新手。 – Allwyn 2010-12-17 15:47:40