Qt如何解析XML-创新互联
这篇文章给大家分享的是有关 Qt如何解析XML的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

如何使用QXmlStreamReader来解析格式良好的XML,Qt的文档中指出,它是一种更快、更方便的Qt自己的SAX解析器(QXmlSimpleReader)的替代,它也较快,在某种情况下,比DOM(QDomDocument)更方便。
XML文件:

解析方法:
void ParseXML::parseXML(QString file_name)
{
if(file_name.isEmpty())
return;
QFile *file = new QFile(file_name);
if(!file->open(QFile::ReadOnly | QFile::Text))
{
QMessageBox::information(NULL, QString("title"), QString("open error!"));
return;
}
//QXmlStreamReader操作任何QIODevice.
QXmlStreamReader xml(file);
QList> persons;
//解析XML,直到结束
while(!xml.atEnd() && !xml.hasError())
{
//读取下一个element.
QXmlStreamReader::TokenType token = xml.readNext();
//如果获取的仅为StartDocument,则进行下一个
if(token == QXmlStreamReader::StartDocument)
{
continue;
}
//如果获取了StartElement,则尝试读取
if(token == QXmlStreamReader::StartElement)
{
//如果为persons,直接进入下一个
if(xml.name() == "persons")
{
continue;
}
//如果为person,则对其进行解析
if(xml.name() == "person")
{
persons.append(this->parsePerson(xml));
}
}
}
if(xml.hasError())
{
QMessageBox::information(NULL, QString("parseXML"), xml.errorString());
}
//从reader中删除所有设备、数据,并将其重置为初始状态
xml.clear();
}
QMap ParseXML::parsePerson(QXmlStreamReader& xml)
{
QMap person;
//检查是否获取person
if(xml.tokenType() != QXmlStreamReader::StartElement &&
xml.name() == "person")
{
return person;
}
//获取person属性
QXmlStreamAttributes attributes = xml.attributes();
if(attributes.hasAttribute("id"))
{
person["id"] = attributes.value("id").toString();
}
//操作下一个
xml.readNext();
while(!(xml.tokenType() == QXmlStreamReader::EndElement &&
xml.name() == "person"))
{
if(xml.tokenType() == QXmlStreamReader::StartElement)
{
if(xml.name() == "name")
{
this->addElementDataToMap(xml, person);
}
if(xml.name() == "age")
{
this->addElementDataToMap(xml, person);
}
if(xml.name() == "email")
{
this->addElementDataToMap(xml, person);
}
if(xml.name() == "website")
{
this->addElementDataToMap(xml, person);
}
}
xml.readNext();
}
QString id = person["id"];
QString name = person["name"];
QString age = person["age"];
QString email = person["email"];
QString website = person["website"];
return person;
}
void ParseXML::addElementDataToMap(QXmlStreamReader& xml,
QMap& map) const
{
if(xml.tokenType() != QXmlStreamReader::StartElement)
{
return;
}
QString elementName = xml.name().toString();
xml.readNext();
if(xml.tokenType() != QXmlStreamReader::Characters)
{
return;
}
map.insert(elementName, xml.text().toString());
}感谢各位的阅读!关于“ Qt如何解析XML”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
文章名称:Qt如何解析XML-创新互联
本文链接:http://yantingwz.cn/article/ddpsjp.html
其他资讯
- 游戏行业抢滩登陆AIGC,更多精彩尽在2023ChinaJoy“数字科技创新主题展区”!
- 抖音账号电商直播运营kpi考核指标(抖音账号直播电商运营方案)
- 直播营销与运营的5大方法,提升直播销售转化率的方法
- 归档日志路径查询,设置归档路径archivelog
- Pytorch中使用tensorboard中如何添加torch.Tensor形式的图片add_image和add_images
- 服务器里的数据安全 服务器里的数据安全是什么
- 常州阿里云服务器功能 阿里云服务器是什么东西
- 二次供水控制电脑故障(二次供水控制器)
- 何为android 何为其然也句式
- 详读VisualStudio2005开发环境使用


咨询
建站咨询
