Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1435287
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: Windows平台

2017-04-04 18:11:32

参考:
http://blog.csdn.net/liang19890820/article/details/52808829

点击(此处)折叠或打开

  1. #ifndef QT_NO_XMLSTREAMREADER
  2. class Q_CORE_EXPORT QXmlStreamReader {
  3.     QDOC_PROPERTY(bool namespaceProcessing READ namespaceProcessing WRITE setNamespaceProcessing)
  4. public:
  5.     enum TokenType {
  6.         NoToken = 0,
  7.         Invalid,
  8.         StartDocument,
  9.         EndDocument,
  10.         StartElement,
  11.         EndElement,
  12.         Characters,
  13.         Comment,
  14.         DTD,
  15.         EntityReference,
  16.         ProcessingInstruction
  17.     };

该枚举指定 reader 刚刚读取的标记类型。

常量 描述
QXmlStreamReader::NoToken 0 reader 还没有读取任何东西
QXmlStreamReader::Invalid 1 发生错误,记录在 error() 和 errorString() 中
QXmlStreamReader::StartDocument 2 reader 记录了 XML 版本号(documentVersion()),以及 XML 文档中指定的编码(documentEncoding()),如果文档被声明为独立的,isStandaloneDocument() 返回 true;否则返回 false。
QXmlStreamReader::EndDocument 3 表示文档的结束
QXmlStreamReader::StartElement 4 表示一个拥有 namespaceUri() 和 name() 的元素开始。空元素也由 StartElement 表示,紧跟着 EndElement。可以调用便利函数 readElementText() 来来获取所有内容,直到遇到对应的 EndElement。属性在 attributes() 中声明,命名空间则在 namespaceDeclarations() 中声明。
QXmlStreamReader::EndElement 5 表示一个拥有 namespaceUri() 和 name() 的元素的结束
QXmlStreamReader::Characters 6 reader 由 text() 表示字符, 如果字符都是空格,isWhitespace() 返回true。如果字符来自 CDATA 部分,isCDATA() 返回 true。
QXmlStreamReader::Comment 7 reader 由 text() 表示注释
QXmlStreamReader::DTD 8 reader 由 text() 表示 DTD,notationDeclarations() 表示符号声明,entityDeclarations() 表示实体声明,DTD 声明的详细信息则由 dtdName()、dtdPublicId() 和 dtdSystemId() 表示。
QXmlStreamReader::EntityReference 9 reader 记录一个无法解析的实体引用,引用的名称由 name() 表示,替换文本为 text()。
QXmlStreamReader::ProcessingInstruction 10 reader 由 processingInstructionTarget() 和 processingInstructionData() 来表示处理指令


点击(此处)折叠或打开

  1. void parseBlog(QXmlStreamReader &reader) {
  2.     while (!reader.atEnd()) {
  3.         reader.readNext();
  4.         if (reader.isStartElement()) { // 开始元素
  5.             QString strElementName = reader.name().toString();
  6.             if (QString::compare(strElementName, "Blog") == 0) {
  7.                 qDebug() << QString::fromLocal8Bit("********** 开始元素 ********** ");
  8.             } else if (QString::compare(strElementName, QStringLiteral("作者")) == 0) { // 方式一
  9.                 reader.readNext();
  10.                 if (reader.isCharacters()) {
  11.                     qDebug() << QStringLiteral("author:%1").arg(reader.text().toString());
  12.                 }
  13.             } else if (QString::compare(strElementName, QStringLiteral("主页")) == 0) { // 方式二
  14.                 qDebug() << QStringLiteral("mainPage:%1").arg(reader.readElementText());
  15.             } else if (QString::compare(strElementName, QStringLiteral("个人说明")) == 0) {
  16.                 qDebug() << QStringLiteral("description:%1").arg(reader.readElementText());
  17.             }
  18.         } else if (reader.isEntityReference()) { // 实体引用
  19.             QString strName = reader.name().toString();
  20.             QString strText = reader.text().toString();
  21.             qDebug() << QString("EntityReference : %1(%2)").arg(strName).arg(strText);
  22.         } else if (reader.isCDATA()) { // CDATA
  23.             QString strCDATA = reader.text().toString();
  24.             qDebug() << QString("CDATA : %1").arg(strCDATA);

  25.             reader.readNext();
  26.             if (reader.isCharacters()) {
  27.                 QString strCharacters = reader.text().toString();
  28.                 qDebug() << QString("Characters: %1").arg(strCharacters);
  29.             }
  30.         } else if (reader.isEndElement()) { // 结束元素
  31.             QString strElementName = reader.name().toString();
  32.             if (QString::compare(strElementName, "Blogs") == 0) {
  33.                 qDebug() << QString::fromLocal8Bit("********** end Blogs ********** ");
  34.                 break; // 跳出循环(解析 QXmlStreamReader::EndDocument)
  35.             } else if (QString::compare(strElementName, "Blog") == 0) {
  36.                 qDebug() << QString::fromLocal8Bit("********** end Blog ********** ");
  37.             }
  38.         }
  39.     }
  40. }

  41. int main(int argc, char *argv[])
  42. {
  43.     QCoreApplication a(argc, argv);

  44.     QMap<QString,int> inputData;
  45.     inputData.insert("aaaa",12);
  46.     inputData.insert("bbbb",30);
  47. //二进制文件操作
  48.     QFile testFile("test.dat");
  49.     if (!testFile.open(QIODevice::ReadWrite))
  50.     {
  51.         printf("error:open file fail");
  52.         return -1;
  53.     }

  54.     QDataStream fileInputStream(&testFile);
  55.     fileInputStream.setVersion(QDataStream::Qt_5_1);
  56.     fileInputStream<<inputData;

  57.     testFile.flush();

  58.     QDataStream fileReadStream(&testFile);
  59.     fileReadStream.setVersion(QDataStream::Qt_5_1);
  60.     QMap<QString,int> readData;
  61.     fileReadStream>>readData;

  62.     QMapIterator<QString, int> itr(readData);
  63.     while(itr.hasNext())
  64.     {
  65.         printf("key=%s\r\n",itr.next().key().toLatin1().data());
  66.         printf("data=%d\r\n",itr.next().value());
  67.     }
  68.     printf("write sucess!\r\n");

  69. //文本文件操作
  70.     QFile txtFile("test.txt");
  71.     if (!txtFile.open(QIODevice::ReadOnly))
  72.     {
  73.         printf("error:open file\r\n");
  74.         return -1;
  75.     }
  76.     QString readLine;
  77.     QTextStream txtStream(&txtFile);
  78.     while (!txtStream.atEnd())
  79.     {
  80.         readLine = txtStream.readLine();
  81.         printf("line:%s\r\n",readLine.toLatin1().data());
  82.     }
  83.     printf("read end\r\n");

  84. //解析xml文件
  85.     QFile xmlFile("test.xml");
  86.     if (!xmlFile.open(QIODevice::ReadOnly))
  87.     {
  88.         qDebug()<<"text.xml open fail"<<endl;
  89.         return -1;
  90.     }
  91.     QXmlStreamReader xmlReader(&xmlFile);
  92.     while (!xmlReader.atEnd())
  93.     {
  94.         QXmlStreamReader::TokenType tokenType = xmlReader.readNext();

  95.         switch(tokenType)
  96.         {
  97.             case (QXmlStreamReader::StartDocument): //开始的版本 编码 等信息
  98.             {
  99.                 QString strVersion = xmlReader.documentVersion().toString();
  100.                 QString strEncoding = xmlReader.documentEncoding().toString();
  101.                 bool bAlone = xmlReader.isStandaloneDocument();
  102.                 qDebug() << QString::fromLocal8Bit("version:%1 code:%2 Standalone:%3")
  103.                                         .arg(strVersion).arg(strEncoding).arg(bAlone) << "\r\n";
  104.                 break;
  105.             }
  106.             case (QXmlStreamReader::Comment)://注释语句 <!>
  107.             {
  108.                 QString strComment = xmlReader.text().toString();
  109.                 qDebug() << strComment << "\r\n";
  110.                 break;
  111.             }
  112.             case (QXmlStreamReader::StartElement): //数据开始符号
  113.             {
  114.                 QString strElementName = xmlReader.name().toString();
  115.                 if(QString::compare(strElementName,"Blogs") == 0)
  116.                 {
  117.                     QXmlStreamAttributes attributes = xmlReader.attributes();
  118.                     if (attributes.hasAttribute("Version"))
  119.                     {
  120.                         QString strVersion = attributes.value("Version").toString();
  121.                         qDebug() << QString::fromLocal8Bit("属性:Version(%1)").arg(strVersion);
  122.                     }
  123.                     parseBlog(xmlReader);
  124.                 }
  125.                 break;
  126.             }
  127.             default:
  128.             {
  129.                 break;
  130.             }
  131.         }
  132.     }
  133.     return a.exec();
  134. }


DOM方式写XML文件
http://laokaddk.blog.51cto.com/368606/599977/

阅读(1726) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~