42.写入XML
2024-09-07 01:28:07
#include <QtGui>
#include <QtXml>
#include <iostream> //创建一个树结构
void populateTree(QTreeWidget *treeWidget)
{
QStringList labels;
labels << QObject::tr("Terms") << QObject::tr("Pages"); treeWidget->setHeaderLabels(labels);
treeWidget->header()->setResizeMode(QHeaderView::Stretch);
treeWidget->setWindowTitle(QObject::tr("XML Stream Writer"));
treeWidget->show(); (void) new QTreeWidgetItem(treeWidget,
QStringList() << "sidebearings" << "10, 34-35, 307-308");
QTreeWidgetItem *subterm = new QTreeWidgetItem(treeWidget,
QStringList() << "subtraction");
(void) new QTreeWidgetItem(subterm,
QStringList() << "of pictures" << "115, 244");
(void) new QTreeWidgetItem(subterm,
QStringList() << "of vectors" << "");
} //生成一个新的开始标签
void writeIndexEntry(QXmlStreamWriter *xmlWriter, QTreeWidgetItem *item)
{
//创建一个开始标签
xmlWriter->writeStartElement("entry");
//给标签添加属性
xmlWriter->writeAttribute("term", item->text());
//获取子树的第二个元素
QString pageString = item->text();
//根据','拆开
if (!pageString.isEmpty()) {
QStringList pages = pageString.split(", ");
//依次写入Text元素
foreach (QString page, pages)
xmlWriter->writeTextElement("page", page);
}
//如果有子项则递归调用
for (int i = ; i < item->childCount(); ++i)
writeIndexEntry(xmlWriter, item->child(i));
xmlWriter->writeEndElement();
} bool writeXml(const QString &fileName, QTreeWidget *treeWidget)
{
QFile file(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
std::cerr << "Error: Cannot write file "
<< qPrintable(fileName) << ": "
<< qPrintable(file.errorString()) << std::endl;
return false;
} //写xml
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
//写首行<?xml version="1.0" encoding="UTF-8">
xmlWriter.writeStartDocument();
//生成一个开始标签
xmlWriter.writeStartElement("bookindex");
//对于每一个顶级项,调用writeIndexEntry函数
for (int i = ; i < treeWidget->topLevelItemCount(); ++i)
writeIndexEntry(&xmlWriter, treeWidget->topLevelItem(i));
xmlWriter.writeEndDocument(); file.close();
if (file.error()) {
std::cerr << "Error: Cannot write file "
<< qPrintable(fileName) << ": "
<< qPrintable(file.errorString()) << std::endl;
return false;
}
return true;
} int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTreeWidget treeWidget;
populateTree(&treeWidget);
writeXml("out1.xml", &treeWidget);
return app.exec();
}
最新文章
- SQL优化技术分析-4:其他
- Android进程保活
- 夺命雷公狗-----React---21--小案例之心情留言板
- 15个前卫的 HTML5 &; CSS3 网页设计作品
- Java基础之集合框架——使用真的的链表LinkedList<;>;(TryPolyLine)
- [JSP] c:forEach 输出序号 每行自动生成序号
- 多线程问题(JVM重排序)
- Storm系列(一)集群的安装配置
- STL 统计vector容器中指定对象元素出现的次数:count()与count_if()算法
- 定时器 QuartZ Cron表达式
- redis centos启动
- 微信小程序动态数据跑马灯组件编写
- mac navicate破解版汉化
- The Kernel Boot Process.内核引导过程
- ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理
- Jetty学习四:部署到Jetty
- sqlplus 格式化一例
- leetcode简单题目两道(2)
- HDU 2544 最短路(floyd+bellman-ford+spfa+dijkstra队列优化)
- chrome 中for-in 在遍历对象时的顺序问题