QT使用xml流读取与写入xml文件
QXmlStreamReader解析xml文档,快速读取比SAX读取更快更方便。
SAX读取参考:
QXmlStreamWriter,只能写入,创建新的xml文件
不能添加,修改,删除某一元素操作。
如果需要实现增删改查操作:
参考DOM:
#include <QCoreApplication>
#include <QFile>
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile file("my2.xml");//../xx/my2.xml
if(!file.open(QIODevice::ReadOnly|QFile::Text)) //在读取时,将行结束符转换成 \n;在写入时,
// 将行结束符转换成本地格式,例如 Win32 平台
// 上是 \r\n
{
qDebug()<<"无法打开文件";
return 1;
}
//读取xml
QXmlStreamReader reader;
//设置文件,将流设置为初始状态
reader.setDevice(&file);
//如果没有读到文档结尾,并且没有出现错误
while(!reader.atEnd())
{
//读取下一个记号,它返回记号的类型
QXmlStreamReader::TokenType type=reader.readNext();
//根据记号的类型来进行不同的输出
if(type ==QXmlStreamReader::StartDocument)
qDebug()<<reader.documentEncoding()<<reader.documentVersion();
if(type==QXmlStreamReader::StartElement)
{
qDebug()<<"<"<<reader.name()<<">";
if(reader.attributes().hasAttribute("编号"))
qDebug()<<reader.attributes().value("编号");
}
if(type==QXmlStreamReader::EndElement)
qDebug()<<"</"<<reader.name()<<">";
if(type==QXmlStreamReader::Characters &&!reader.isWhitespace())
qDebug()<<reader.text();
}
//读取过程中出现错误,就输出错误信息
if(reader.hasError())
{
qDebug()<<"错误信息:"<<reader.errorString();
}
file.close();
//写入my3.xml
QFile file2("my3.xml");//../xx/my2.xml
if(!file2.open(QIODevice::WriteOnly|QFile::Text)) //在读取时,将行结束符转换成 \n;在写入时,
// 将行结束符转换成本地格式,例如 Win32 平台
// 上是 \r\n
{
qDebug()<<"无法打开文件";
return 1;
}
QXmlStreamWriter stream(&file2);
stream.setAutoFormatting(true);
stream.writeStartDocument();
stream.writeStartElement("book_mak");
stream.writeAttribute("href","https://blog.csdn.net/txwtech");
stream.writeTextElement("书名","博客首页");
stream.writeEndElement();
stream.writeEndDocument();
file2.close();
qDebug()<<"写入完成";
return a.exec();
}