网上购物软件,seo包年优化平台,网站 提交入口,个人网站 可以自己做服务器文章目录 背景QXmlStreamReader简单介绍使用QXmlStreamReader添加头文件QXmlStreamReadertoString()toInt()完整代码 背景
项目中遇到需要解析某个方法返回的xml字符串#xff0c;奈何C/C中没有原生的方法可供调用#xff0c;只能使用第三方库#xff0c;搜了一圈资… 文章目录 背景QXmlStreamReader简单介绍使用QXmlStreamReader添加头文件QXmlStreamReadertoString()toInt()完整代码 背景
项目中遇到需要解析某个方法返回的xml字符串奈何C/C中没有原生的方法可供调用只能使用第三方库搜了一圈资料发现都不好用。刚好项目中用的Qt瞬间想到了Qt中提供的各种各样的函数去仔细查了一下Qt中提供的函数——QXmlStreamReader真救命稻草几行代码就搞定了我的需求。
QXmlStreamReader简单介绍
自QT4.3版本开始QT提供了两个新类来读写XMLQXmlStreamReader 和 QXmlStreamWriter。顾名思义QXmlStreamReader用于读取XMLQXmlStreamWriter用于写入XML。这两个类都使用流的方式操作xml比起使用DOM和SAX解析xml这是最快最方便的操作xml的方法。
使用QXmlStreamReader
添加头文件
假设有如下xml字符串解析获取其中name、attr1、attr2的值 使用QXmlStreamReader只需要简单的几行代码就能搞定
QString xml R(?xml version1.0 encodingUTF-8?featureinfofeaturesfeature namea attr1100 attr210 /feature nameb attr1200 attr220 /feature namec attr1300 attr230 //features/featureinfo);// 1、初始化QXmlStreamReaderQXmlStreamReader reader(xml);while(!reader.atEnd() !reader.hasError()) {// 2、使用readNext读取下一行QXmlStreamReader::TokenType token reader.readNext();if (token QXmlStreamReader::StartElement) { // 判断是否为xml开始标签即左边的if (reader.name() feature) { // 标签名称qDebug() name: reader.attributes().value(name).toString() attr1: reader.attributes().value(attr1).toInt() attr2: reader.attributes().value(attr2).toInt();}}}最后调用attributes()方法获取对应的属性值即可。需要注意的是reader.attributes().value(“name”).toString()还是toInt()需要根据实际数据类型来确定字符串就选toString整数就选toInt。区别如下
toString()
qDebug() name: reader.attributes().value(name).toString() attr1: reader.attributes().value(attr1).toString() attr2: reader.attributes().value(attr2).toString();可以看到输出的也是字符串类型。
toInt()
qDebug() name: reader.attributes().value(name).toString() attr1: reader.attributes().value(attr1).toInt() attr2: reader.attributes().value(attr2).toInt();此处输出的是int类型。
完整代码
项目文件test.pro TEMPLATE app CONFIG console c11 CONFIG - app_bundle
SOURCES main.cpp main.cpp
#include iostream
#include QString
#include QXmlStreamReader
#include qDebugusing namespace std;int main()
{QString xml R(?xml version1.0 encodingUTF-8?featureinfofeaturesfeature namea attr1100 attr210 /feature nameb attr1200 attr220 /feature namec attr1300 attr230 //features/featureinfo);// 1、初始化QXmlStreamReaderQXmlStreamReader reader(xml);while(!reader.atEnd() !reader.hasError()) {// 2、使用readNext读取下一行QXmlStreamReader::TokenType token reader.readNext();if (token QXmlStreamReader::StartElement) { // 判断是否为xml开始标签即左边的if (reader.name() feature) { // 标签名称qDebug() name: reader.attributes().value(name).toString() attr1: reader.attributes().value(attr1).toInt() attr2: reader.attributes().value(attr2).toInt();//qDebug() name: reader.attributes().value(name).toString() attr1: reader.attributes().value(attr1).toString() attr2: reader.attributes().value(attr2).toString();}}}return 0;
}