QT读写XML文件(QXmlStreamWriter 与 QXmlStreamReader)

使用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();
}
原文链接:https://blog.csdn.net/weixin_42126427/article/details/108202963

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值