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#语句2——循环语句(for循环与for循环嵌套)
    C#语言基础
    C#几种截取字符串的方法小结
    SQL提取数据库表名,字段名等信息
    Winform绑定图片的三种方式
    C#中遍历各类数据集合的方法总结
    c#winform图片绘制与图片验证码
    DataGridView根据条件给单元格绑定图片
    C#Winform 父窗体 子窗体 传值
    一条Sql语句分组排序并且限制显示的数据条数
  • 原文地址:https://www.cnblogs.com/xiaochi/p/9028946.html
Copyright © 2011-2022 走看看