1、问题来源
本博文源于笔者正在着手的C++ qt读取xml,一开始没想过如何做,但是各方查阅,就慢慢有了眉目
2、问题具体分析
假如一个xml文件叫做test.xml,里面的内容是这样的。
<?xml version='1.0' encoding='utf-8'?>
<StringTable>
<string id="Math">数学</string>
<string id="English">英语</string>
</StringTable>
j现在将其进行遍历,并存储到QMap里
3、问题解决方案
利用qt的一些相关库直接写。
#include <QFile>
#include <QXmlStreamReader>
#include <QTextCodec>
#include <QString>
#include <QDebug>
#include <QMessageBox>
#include<QMap>
using namespace std;
testXml::testXml(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
//目标很简单,将你好,显示在lineEdit
QString filePath = "test.xml";
QFile file(filePath);
if (!file.open(QFile::ReadOnly | QFile::Text)) {
QMessageBox::critical(this,"Failed","Failed");
return ;
}
QMap<QString,QString> map;
QXmlStreamReader xmlReader(&file);
while (!xmlReader.atEnd()) {
if (xmlReader.readNext() == QXmlStreamReader::StartElement) {
if (xmlReader.name() == "string" && xmlReader.attributes().hasAttribute("id")) {
QString id = xmlReader.attributes().value("id").toString();
QString text = xmlReader.readElementText();
map[id] = text;
}
}
}
if (xmlReader.hasError()) {
QString message = QString("XML Error: %1").arg(xmlReader.errorString());
QMessageBox::critical(this,"Failed",message);
}
file.close();
}
4、总结
通过问题的起因,找到问题的解决方案,最终将问题成功解决。