zoukankan      html  css  js  c++  java
  • 42.写入XML

     1 #include <QtGui>
     2 #include <QtXml>
     3 #include <iostream>
     4 
     5 //创建一个树结构
     6 void populateTree(QTreeWidget *treeWidget)
     7 {
     8     QStringList labels;
     9     labels << QObject::tr("Terms") << QObject::tr("Pages");
    10 
    11     treeWidget->setHeaderLabels(labels);
    12     treeWidget->header()->setResizeMode(QHeaderView::Stretch);
    13     treeWidget->setWindowTitle(QObject::tr("XML Stream Writer"));
    14     treeWidget->show();
    15 
    16     (void) new QTreeWidgetItem(treeWidget,
    17             QStringList() << "sidebearings" << "10, 34-35, 307-308");
    18     QTreeWidgetItem *subterm = new QTreeWidgetItem(treeWidget,
    19             QStringList() << "subtraction");
    20     (void) new QTreeWidgetItem(subterm,
    21             QStringList() << "of pictures" << "115, 244");
    22     (void) new QTreeWidgetItem(subterm,
    23             QStringList() << "of vectors" << "9");
    24 }
    25 
    26 //生成一个新的开始标签
    27 void writeIndexEntry(QXmlStreamWriter *xmlWriter, QTreeWidgetItem *item)
    28 {
    29     //创建一个开始标签
    30     xmlWriter->writeStartElement("entry");
    31     //给标签添加属性
    32     xmlWriter->writeAttribute("term", item->text(0));
    33     //获取子树的第二个元素
    34     QString pageString = item->text(1);
    35     //根据','拆开
    36     if (!pageString.isEmpty()) {
    37         QStringList pages = pageString.split(", ");
    38         //依次写入Text元素
    39         foreach (QString page, pages)
    40             xmlWriter->writeTextElement("page", page);
    41     }
    42     //如果有子项则递归调用
    43     for (int i = 0; i < item->childCount(); ++i)
    44         writeIndexEntry(xmlWriter, item->child(i));
    45     xmlWriter->writeEndElement();
    46 }
    47 
    48 
    49 bool writeXml(const QString &fileName, QTreeWidget *treeWidget)
    50 {
    51     QFile file(fileName);
    52     if (!file.open(QFile::WriteOnly | QFile::Text)) {
    53         std::cerr << "Error: Cannot write file "
    54                   << qPrintable(fileName) << ": "
    55                   << qPrintable(file.errorString()) << std::endl;
    56         return false;
    57     }
    58 
    59     //写xml
    60     QXmlStreamWriter xmlWriter(&file);
    61     xmlWriter.setAutoFormatting(true);
    62     //写首行<?xml version="1.0" encoding="UTF-8">
    63     xmlWriter.writeStartDocument();
    64     //生成一个开始标签
    65     xmlWriter.writeStartElement("bookindex");
    66     //对于每一个顶级项,调用writeIndexEntry函数
    67     for (int i = 0; i < treeWidget->topLevelItemCount(); ++i)
    68         writeIndexEntry(&xmlWriter, treeWidget->topLevelItem(i));
    69     xmlWriter.writeEndDocument();
    70 
    71     file.close();
    72     if (file.error()) {
    73         std::cerr << "Error: Cannot write file "
    74                   << qPrintable(fileName) << ": "
    75                   << qPrintable(file.errorString()) << std::endl;
    76         return false;
    77     }
    78     return true;
    79 }
    80 
    81 int main(int argc, char *argv[])
    82 {
    83     QApplication app(argc, argv);
    84     QTreeWidget treeWidget;
    85     populateTree(&treeWidget);
    86     writeXml("out1.xml", &treeWidget);
    87     return app.exec();
    88 }
  • 相关阅读:
    美团这个项目是用来干啥的?
    基于C#的机器学习--面部和动态检测-图像过滤器
    基于C#的机器学习--颜色混合-自组织映射和弹性神经网络
    EF Core For Oracle11中Find FirstOrDefault等方法执行失败
    使用DataContractJsonSerializer发序列化对象时出现的异常
    数据库空值排序
    C#浅拷贝与深拷贝测试
    C#排序算法的实现---快速排序
    C#排序算法的实现---选择排序
    C#排序算法的实现---冒泡排序
  • 原文地址:https://www.cnblogs.com/xiaochi/p/9028946.html
Copyright © 2011-2022 走看看