从Qt 4.3开始引用了两个新的类来读取和写入XML文档:QXmlStreamReader和QXmlStreamWriter. 这个比SAX框架更简单,操作也更加方便.一些操作事件类型和一去看帮助文档.
新建控制台应用,名称为myXmlStream .在myXmlStream.pro中添加 QT +=xml
main.cpp
#include <QtCore/QCoreApplication> #include <QFile> #include <QXmlStreamReader> #include <QXmlStreamWriter> #include <QDebug> void WirteXml(char *filename) { QFile file(filename); if (!file.open(QFile::WriteOnly | QFile::Text)) { qDebug() << "Error: cannot open file"; return ; } QXmlStreamWriter stream(&file); stream.setAutoFormatting(true); stream.writeStartDocument(); stream.writeStartElement("bookmark"); stream.writeAttribute("href","http://blog.csdn.net/qq_21792169"); stream.writeTextElement("title","Linux_Google"); stream.writeEndElement(); stream.writeEndDocument(); file.close(); qDebug() << "write finished!"; } void ReadXml(char *filename) { QFile file(filename); if (!file.open(QFile::ReadOnly | QFile::Text)) { qDebug()<<"Error: cannot open file"; return ; } 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("id")) qDebug() << reader.attributes().value("id"); } if (type == QXmlStreamReader::EndElement) qDebug() << "</" << reader.name() << ">"; if (type == QXmlStreamReader::Characters && !reader.isWhitespace()) qDebug() << reader.text(); } if (reader.hasError()) { qDebug() << "error: " << reader.errorString(); } file.close(); } int main(int argc,char *argv[]) { QCoreApplication a(argc,argv); ReadXml("./my.xml"); WirteXml("./my2.xml"); return a.exec(); }
my2.xml
<?xml version="1.0" encoding="UTF-8"?> <bookmark href="http://blog.csdn.net/qq_21792169"> <title>Linux_Google</title> </bookmark>