【已解决】基于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、总结

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 QtXML 方式读取翻译 .ts 文件的内容,并将每个翻译字段存储到一个 `QMap` 中的代码示例: ```cpp #include <QCoreApplication> #include <QTranslator> #include <QXmlStreamReader> #include <QFile> #include <QMap> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); // 创建翻译器对象 QTranslator translator; // 加载翻译文件并以 XML 格式读取 QFile file("myapp_zh_CN.qm"); if (file.open(QIODevice::ReadOnly)) { QByteArray data = file.readAll(); translator.loadFromData(data, "myapp_zh_CN.qm"); file.close(); } // 解析 XML 文件内容并存储QMapQMap<QString, QString> translations; QXmlStreamReader xml(&data); while (!xml.atEnd() && !xml.hasError()) { QXmlStreamReader::TokenType token = xml.readNext(); if (token == QXmlStreamReader::StartElement && xml.name() == "message") { QString key, value; while (!(xml.tokenType() == QXmlStreamReader::EndElement && xml.name() == "message")) { if (xml.tokenType() == QXmlStreamReader::StartElement && xml.name() == "source") { xml.readNext(); key = xml.text().toString(); } else if (xml.tokenType() == QXmlStreamReader::StartElement && xml.name() == "translation") { xml.readNext(); value = xml.text().toString(); } xml.readNext(); } if (!key.isEmpty() && !value.isEmpty()) { translations.insert(key, value); } } } // 输出 QMap 中的翻译内容 QMap<QString, QString>::iterator i; for (i = translations.begin(); i != translations.end(); ++i) { qDebug() << i.key() << ": " << i.value(); } // 安装翻译器 app.installTranslator(&translator); // 使用翻译 QString msg = QObject::tr("Hello World!"); qDebug() << msg; return app.exec(); } ``` 在上述代码中,我们首先创建了一个 `QTranslator` 对象,并使用 `loadFromData` 函数从名为 `myapp_zh_CN.qm` 的文件中以 XML 格式读取翻译内容。注意,我们需要使用 `QFile` 类先打开文件,再读取文件内容。接下来,我们使用 `QXmlStreamReader` 类解析 XML 文件内容,并将每个翻译字段存储到一个 `QMap` 中。最后,我们输出了 `QMap` 中的翻译内容,以及使用 `tr` 函数翻译了一个字符串,并使用 `qDebug` 输出了翻译后的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值