C ++ XML解析器QT - 无法正常工作

时间:2010-12-17 15:36:04

标签: c++ xml qt

以下是我的代码& xml文件。我正在尝试读取xml文件并存储内容。但它不起作用。请帮忙

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 个答案:

答案 0 :(得分: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(它将是key = value),但您几乎不需要担心文件本身。要在文件上设置任何值也很容易:

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

您的配置文件如下所示:

[General]
path=/var/log/

请参阅:QSettings documentation