《Qt开发》读写XML文档2_流读写

使用QXmlStreamWriter写XML文档

QXmlStreamWriter类为XML编写器提供了一个简单的流API,使用writeStartDocument()开始写文档,writeEndDocument()结束写文档。

使用WriteStarteElement()打开元素标记,后跟writeAttribute()或writeAttributes()、元素内容,然后使用writeEndElement()关闭元素。

使用writeTextElement()可用于写入只包含文本的元素。

使用writeCharacters()写元素内容

 

1.准备文件

QFile file("my.xml");

if (!file.open(QFile::WriteOnly | QFile::Text))

{

return;

}

 

2.准备QXmlStreamWriter 对象writeStream;

QXmlStreamWriter writeStream(&file);

 

3.设置标签缩进格式

writeStream.setAutoFormatting(true);

4.写XML文档

writeStream.writeStartDocument();    //开始写文档

writeStream.writeStartElement("bookmark");   //开始写元素

writeStream.writeAttribute("href","http://qt.nokia.com/");   //写元素属性

writeStream.writeTextElement("title","Qt Home");  //写只包含文本的元素

writeStream.writeTextElement("author", "wangwei");//写只包含文本的元素

 

//元素和元素内容分开写的方法

writeStream.writeStartElement("year");          

writeStream.writeCharacters("2000"); 

writeStream.writeEndElement();  //end year

 

writeStream.writeEndElement();  //end bookmark

writeStream.writeEndDocument(); //结束写文档

5.关闭文件

file.close();

 

使用QXmlStreamReader读XML文档

QXmlStreamReader类提供了一个快速解析器,用于通过简单的流API读取格式良好的XML文档。

使用QXmlStreamReader,应用程序根据需要从读取器中一个接一个地提取标记。这是通过调用readNext()完成的,读取器从输入流中读取,直到完成下一个标记,然后返回TokenType。根据不同的TokenType,解析不同的内容。

 

1.准备要读取的XML文档

QFile file("my.xml");

if (!file.open(QFile::ReadOnly | QFile::Text))

{

        return;

    }

2.准备QXmlStreamReader对象readStream

QXmlStreamReader readStream(&file);

//或使用以下方式

QXmlStreamReader readStream;

readStream.setDevice(&file);

3.读XML文件

while (!readStream.atEnd())

{

        //提取标记

        QXmlStreamReader::TokenType type = readStream.readNext();

       

        //根据不同的标记类型,分别处理

        if (type == QXmlStreamReader::StartDocument)

        {

            ui.listWidget->addItem(readStream.documentEncoding().toString()); 

            ui.listWidget->addItem(readStream.documentVersion().toString());

        }

        if (type == QXmlStreamReader::StartElement)

        {

            ui.listWidget->addItem(readStream.name().toString());

            if (readStream.attributes().hasAttribute("href"))

            {          

                ui.listWidget->addItem(readStream.attributes().value("href").toString());

            }

        }

        if (type == QXmlStreamReader::EndElement)

        {

            ui.listWidget->addItem(readStream.name().toString());

        }

        if (type == QXmlStreamReader::Characters && !readStream.isWhitespace())

        {

            ui.listWidget->addItem(readStream.text().toString());

        }

    }

    //读文件出错

    if (readStream.hasError()) {

        ui.listWidget->addItem(readStream.errorString());

   

    }

 

4.关闭文件

file.close();

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不相信眼泪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值