【已解决】基于C++ QT读取xml文件并存储到QMap里

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、总结

通过问题的起因,找到问题的解决方案,最终将问题成功解决。

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/130949508