• 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 }
  • 相关阅读:
    ApacheServer-----关于443端口被占用的解决方法
    《小强与小明》——正在疯传的伟大的故事
    不争万年,只珍朝夕------我的态度
    dubbo搭建
    使用netty的第一个Hello World
    myBatis数据库常用标签
    mysql 索引
    tomcat部署项目的一点心得
    【康托展开】
    初探计算机硬盘
  • 原文地址:https://www.cnblogs.com/xiaochi/p/9028946.html
Copyright © 2020-2023  润新知