Qt之读(解析)XML文件
发布时间:2020-12-16 08:07:28 所属栏目:百科 来源:网络整理
导读:先上代码 //从config.xml中获取标签appenvironment和oa_app_version的值//appenvironment值为pro表示生产,为pre表示预生产QMapQString,QString readXml(){QMapQString,QString mapList;mapList.clear();QString configXMLPath = QCoreApplication::applicat
先上代码 //从config.xml中获取标签appenvironment和oa_app_version的值 //appenvironment值为pro表示生产,为pre表示预生产 QMap<QString,QString> readXml() { QMap<QString,QString> mapList; mapList.clear(); QString configXMLPath = QCoreApplication::applicationDirPath()+"configconfig.xml"; QFile file(configXMLPath); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QXmlStreamReader reader(&file); while (!reader.atEnd() && !reader.hasError()) { QXmlStreamReader::TokenType token = reader.readNext(); if (token == QXmlStreamReader::StartElement) { if (reader.name() == "appenvironment" || reader.name() == "oa_app_version") { QXmlStreamAttributes attributes = reader.attributes(); if (attributes.hasAttribute("value")) { QString strValue = attributes.value("value").toString(); mapList.insert(reader.name().toString(),strValue); } } } } //解析出错 if (reader.hasError()) { QString errorInfo = QStringLiteral("XML解析错误:%1 行号:%2 列号:%3 字符位移:%4"). arg(reader.errorString()).arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.characterOffset()); qDebug() << errorInfo; } file.close(); reader.clear(); } return mapList; }这样写,如果是QApplication a(argc,argv);之后调用QMap<QString,QString> readXml()是没有问题的,但是如果要在QApplication a(argc,argv);之前调用QMap<QString,QString> readXml()就会因为QCoreApplication::applicationDirPath()返回为空,导致无法正确解析XML。 此时可以调用Windows API,如下所示。 //从config.xml中获取标签appenvironment和oa_app_version的值 //appenvironment值为pro表示生产,为pre表示预生产 QMap<QString,QString> mapList; mapList.clear(); TCHAR szPath[MAX_PATH] = { 0 }; GetModuleFileName(NULL,szPath,MAX_PATH); (_tcsrchr(szPath,_T('')))[1] = 0; QString configXMLPath= QString::fromUtf16((const ushort *)szPath)+"configconfig.xml"; QFile file(configXMLPath); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QXmlStreamReader reader(&file); while (!reader.atEnd() && !reader.hasError()) { QXmlStreamReader::TokenType token = reader.readNext(); if (token == QXmlStreamReader::StartElement) { if (reader.name() == "appenvironment" || reader.name() == "oa_app_version") { QXmlStreamAttributes attributes = reader.attributes(); if (attributes.hasAttribute("value")) { QString strValue = attributes.value("value").toString(); mapList.insert(reader.name().toString(),strValue); } } } } //解析出错 if (reader.hasError()) { QString errorInfo = QStringLiteral("XML解析错误:%1 行号:%2 列号:%3 字符位移:%4"). arg(reader.errorString()).arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.characterOffset()); qDebug() << errorInfo; } file.close(); reader.clear(); } return mapList; } XML格式如下。 <?xml version="1.0" encoding="UTF-8"?> <client> <app> <Appname value="cangege"/> </app> <server> <sdkip value="********" /> <sdkport value="********" /> <appid value="********" /> <client_id value="********" /> <oa_os_id value="********" /> <oa_app_version value="1.0.0" /> <appenvironment value="pre" /> <!-- pre(预生产) pro (生产)--> </server> <loginuser> <users id="********"/> </loginuser> </client>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |