小伙伴们今天教大家使用QT读取XML文件,对于qt有很多种方式读取xml,本章使用QXmlStreamWriter ,与QXmlStreamReader
来读取下面xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<SMS>
<name>吉法师</name>
<phone>188XXXXXXXXXX</phone>
<time>2020</time>
</SMS>
<SMS>
<name>小鱼人</name>
<phone>188XXXXXXXXXX</phone>
<time>2020</time>
</SMS>
<SMS>
<name>公孙二狗</name>
<phone>188XXXXXXXXXX</phone>
<time>2020</time>
</SMS>
<SMS>
<name>icy</name>
<phone>188XXXXXXXXXX</phone>
<time>2020</time>
</SMS>
</DATA>
QXmlStreamWriter
对应常用api介绍:
writeStartDocument():写文档头,作用类似于创建一个xml文档,并在文档开头部分写入版本信息和编码信息默认为:
<?xml version="1.0" encoding="UTF-8"?>
同时也可以写1个参数与2个参数.
writeEndDocument(): 对应于writeStartDocument(),当调用这个函数时,即表示文档信息写入完毕。
writeStartElement(): 写入开始记号 比如<SMS>
writeEndElement(): 写入结束记号 比如</SMS>
writeTextElement(): 写入文本信息 比如上面的name,phone,time 等等;
首先在工程中添加:
QT += core xml
代码示例:
void xmlWrite()
{
QString str[]={"吉法师","小鱼人","公孙二狗","icy"};
QFile file("./first.xml");
if(!file.open(QFile::WriteOnly|QFile::Text))
{
qDebug()<< "file cannot open";
return;
}
QXmlStreamWriter stream(&file);
stream.setAutoFormatting(true); //
stream.writeStartDocument(); //默认: <?xml version="1.0" encoding="UTF-8"?>
stream.writeStartElement("DATA");
for (int i = 0; i< 4; i++)
{
stream.writeStartElement("SMS");
stream.writeTextElement("name",str[i]);
stream.writeTextElement("phone","188XXXXXXXXXX");
stream.writeTextElement("time","2020");
stream.writeEndElement();
}
stream.writeEndElement();
stream.writeEndDocument();
file.close();
}
这样就可以写出来对应的xml文本了。
QXmlStreamReader
常用的api:
readNext(): 从xml输入流中读取下一个记号。
name(): 记号的名称,即<名称></名称>
isStartElement():判断当前已读取的记号是否为开始元素,开始元素即<>
isEndElement():判断当前已读取的记号是否为结束元素,结束元素即</>
readElementText():读取当前记号对应的文本值,<>文本值</>
atEnd():判断是否为文件结尾
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<SMS>
<name>吉法师</name>
<phone>188XXXXXXXXXX</phone>
<time>2020</time>
</SMS>
<SMS>
<name>小鱼人</name>
<phone>188XXXXXXXXXX</phone>
<time>2020</time>
</SMS>
<SMS>
<name>公孙二狗</name>
<phone>188XXXXXXXXXX</phone>
<time>2020</time>
</SMS>
<SMS>
<name>icy</name>
<phone>188XXXXXXXXXX</phone>
<time>2020</time>
</SMS>
</DATA>
代码示例:
void xmlRead()
{
QString str;
QFile file("./first.xml");
if(file.open(QFile::ReadOnly|QFile::Text))
{
QXmlStreamReader reader(&file);
reader.readNext(); //过滤掉头一行
while(!reader.atEnd())
{
if(reader.isStartElement())
{
if(reader.name() == "SMS")
{
str = "SMS";
}
else if (reader.name() == "name")
{
str = reader.readElementText();
qDebug() << str << endl;
}
else if (reader.name() == "phone")
{
str = reader.readElementText();
qDebug() << str << endl;
}
else if(reader.name() == "time" )
{
str = reader.readElementText();
qDebug() << str << endl;
}
}
else if (reader.isEndElement())
{
if(reader.name() == "SMS")
{
qDebug()<<endl;
}
}
reader.readNext();
}
}
else {
qDebug() << "not file is here or it's a broken";
}
file.close();
}
读取结果:
"吉法师"
"188XXXXXXXXXX"
"2020"
"小鱼人"
"188XXXXXXXXXX"
"2020"
"公孙二狗"
"188XXXXXXXXXX"
"2020"
"icy"
"188XXXXXXXXXX"
"2020"
完整代码:
#include <QCoreApplication>
#include <QtXml>
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include<QFile>
#include<QDebug>
void xmlWrite()
{
QString str[]={"吉法师","小鱼人","公孙二狗","icy"};
QFile file("./first.xml");
if(!file.open(QFile::WriteOnly|QFile::Text))
{
qDebug()<< "file cannot open";
return;
}
QXmlStreamWriter stream(&file);
stream.setAutoFormatting(true); //
stream.writeStartDocument(); //默认: <?xml version="1.0" encoding="UTF-8"?>
stream.writeStartElement("DATA");
for (int i = 0; i< 4; i++)
{
stream.writeStartElement("SMS");
stream.writeTextElement("name",str[i]);
stream.writeTextElement("phone","188XXXXXXXXXX");
stream.writeTextElement("time","2020");
stream.writeEndElement();
}
stream.writeEndElement();
stream.writeEndDocument();
file.close();
}
void xmlRead()
{
QString str;
QFile file("./first.xml");
if(file.open(QFile::ReadOnly|QFile::Text))
{
QXmlStreamReader reader(&file);
reader.readNext(); //过滤掉头一行
while(!reader.atEnd())
{
if(reader.isStartElement())
{
if(reader.name() == "SMS")
{
str = "SMS";
}
else if (reader.name() == "name")
{
str = reader.readElementText();
qDebug() << str << endl;
}
else if (reader.name() == "phone")
{
str = reader.readElementText();
qDebug() << str << endl;
}
else if(reader.name() == "time" )
{
str = reader.readElementText();
qDebug() << str << endl;
}
}
else if (reader.isEndElement())
{
if(reader.name() == "SMS")
{
qDebug()<<endl;
}
}
reader.readNext();
}
}
else {
qDebug() << "not file is here or it's a broken";
}
file.close();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
xmlWrite();
xmlRead();
return a.exec();
}
喜欢我的博客希望大家关注加收藏,每天的一点进步,终会有所收获。