一.简介 如果要使用xml解析,需要在 pro 文件中 添加 xml模块
需要用到的类:
- QXmlStreamReader:提供了一个快速解析器,用于通过简单的流API读取XML。
- QXmlStreamAttributes:为XML属性。
优点:快速、方便,分块读取XML文件,可读取大文件。
缺点:递增式解析器,只能顺序遍历XML文件的元素,不能随机访问。
二.示例 解析下面的xml文档
16
40
17
45
源码:
QFile file("test.xml");
if (!file.open(QIODevice::ReadOnly))
return;
QXmlStreamReader reader(&file);
// 解析XML直到结束
while (!reader.atEnd())
{
// 读取下一个元素
QXmlStreamReader::TokenType nType = reader.readNext();
switch (nType)
{
case QXmlStreamReader::StartDocument:
{
// XML版本+编码方式
QString strVersion = reader.documentVersion().toString();
QString strEncoding = reader.documentEncoding().toString();
qDebug()<< strVersion;
qDebug()<< strEncoding;
break;
}
case QXmlStreamReader::Comment:
{
// 注释
QString strComment = reader.text().toString();
qDebug() << strComment;
break;
}
case QXmlStreamReader::ProcessingInstruction:
{
// 处理指令
QString strProcInstr = reader.processingInstructionData().toString();
qDebug() << strProcInstr << "\r\n";
break;
}
case QXmlStreamReader::DTD:
{
//如果有DTD 如下解析
// DTD
//QString strDTD = reader.text().toString();
//// DTD 声明
//QString strDTDName = reader.dtdName().toString();
//QString strDTDPublicId = reader.dtdPublicId().toString();
// DTD 公开标识符
//QString strDTDSystemId = reader.dtdSystemId().toString();
// DTD 系统标识符
//qDebug() << QString("DTD : %1").arg(strDTD);
//qDebug() << QString("DTD 名称 : %1").arg(strDTDName);
//qDebug() << QString("DTD 公开标识符 : %1").arg(strDTDPublicId);
//qDebug() << QString("DTD 系统标识符 : %1").arg(strDTDSystemId);
//qDebug() << "\r\n";
break;
}
case QXmlStreamReader::StartElement:
{
// 开始元素
QString strElementName = reader.name().toString();
//找到根元素
if (QString::compare(strElementName, "People") == 0)
{
parse(reader);
}
break;
}
case QXmlStreamReader::EndDocument:
{
// 结束文档
qDebug()<<"parse finished";
break;
}
}
}if (reader.hasError())
{
//解析出错
qDebug() << QString("错误信息:%1行号:%2列号:%3字符位移:%4").arg(reader.errorString()).arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.characterOffset());
}file.close();
// 关闭文件//parse方法
void MainWindow::parse(QXmlStreamReader &reader)
{
while (!reader.atEnd())
{
reader.readNext();
if (reader.isStartElement())
{
// 开始元素
QString strElementName = reader.name().toString();
if (QString::compare(strElementName, "WOMAN") == 0 || QString::compare(strElementName, "MAN") == 0)
{
qDebug() << "WOMAN or MAN";
}
else if (QString::compare(strElementName, ("AGE")) == 0)
{
qDebug()<<"AGE = "<
【Qt基础|Qt 解析XML方式(三)流方式】
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Qt基础|Qt QTreeWidget 详解
- Qt基础|Qt 解析XML方式(二)SAX
- Ubuntu|Ubuntu下Qt Creator配置opencv
- Qt|windows环境下在qt中配置opencv环境
- mybatis|mybatis-config.xml 以及遇到的问题
- qt|qt 之 QSystemTrayIcon(托盘程序整个例子)
- GUI-PyQt5|python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
- GUI-PyQt5|python3GUI--历史上的今天 查看器 By:PyQt5(附源码)
- python小工具|python3GUI--打造一款时间管理工具By:PyQt5(附源码)