QT使用xml流读取与写入xml文件
QXmlStreamReader解析xml文档,快速读取比SAX读取更快更方便。
SAX读取参考:
QXmlStreamWriter,只能写入,创建新的xml文件
不能添加,修改,删除某一元素操作。
如果需要实现增删改查操作:
参考DOM:

- #include
- #include
- #include
- #include
- #include
-
- 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()<
documentEncoding()<documentVersion(); - if(type==QXmlStreamReader::StartElement)
- {
- qDebug()<<"<"<
name()<<">"; - if(reader.attributes().hasAttribute("编号"))
- qDebug()<
attributes().value("编号"); - }
- if(type==QXmlStreamReader::EndElement)
- qDebug()<<""<
name()<<">"; - if(type==QXmlStreamReader::Characters &&!reader.isWhitespace())
- qDebug()<
text(); - }
- //读取过程中出现错误,就输出错误信息
- if(reader.hasError())
- {
- qDebug()<<"错误信息:"<
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();
- }