-
Notifications
You must be signed in to change notification settings - Fork 0
/
simplexmlreadwrite.cpp
125 lines (80 loc) · 2.73 KB
/
simplexmlreadwrite.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include "simplexmlreadwrite.h"
QMap<QString, QString> SimpleXMLReadWrite::readNonIerarchy(const QString& fname)
{
QFile file(fname);
bool ret = file.open(QIODevice::ReadOnly);
if (!ret)
return QMap<QString, QString>();
QXmlStreamReader stream(&file);
QMap<QString, QString> out_map;
stream.readNextStartElement(); // Skip "Settings" tag
while (stream.readNextStartElement()) // Read single element
{
out_map[stream.name().toString()] = stream.readElementText();
}
file.close();
return out_map;
}
bool SimpleXMLReadWrite::writeNonIerarchy(const QMap<QString, QString>& map, const QString& fname)
{
QFile file(fname);
bool ret = file.open(QIODevice::WriteOnly);
if (!ret)
return false;
QXmlStreamWriter stream(&file);
stream.setAutoFormatting(true);
stream.writeStartDocument();
stream.writeStartElement("Settings");
for (auto it = map.begin(); it!= map.end(); it++) {
stream.writeTextElement(it.key(), it.value());
}
stream.writeEndElement();
stream.writeEndDocument();
file.close();
return true;
}
QMap<QString, QMap<QString, QString> > SimpleXMLReadWrite::readIerarchy(const QString& fname)
{
QFile file(fname);
bool ret = file.open(QIODevice::ReadOnly);
if (!ret)
return QMap<QString, QMap<QString, QString> >();
QXmlStreamReader stream(&file);
QMap<QString, QMap<QString, QString> > out_map;
stream.readNextStartElement(); // Skip "Settings" tag
while (stream.readNextStartElement()) { // Read next cmd
QString cmd_name = stream.name().toString();
QMap<QString, QString> single_cmd_map;
while (stream.readNextStartElement()) // Read single cmd info
{
single_cmd_map[stream.name().toString()] = stream.readElementText();
}
out_map[cmd_name] = single_cmd_map;
}
file.close();
return out_map;
}
bool SimpleXMLReadWrite::writeIerarchy(const QMap<QString, QMap<QString, QString> >& map, const QString& fname)
{
QFile file(fname);
bool ret = file.open(QIODevice::WriteOnly);
if (!ret)
return false;
QXmlStreamWriter stream(&file);
stream.setAutoFormatting(true);
stream.writeStartDocument();
stream.writeStartElement("Settings");
for (auto it = map.begin(); it!= map.end(); it++) {
QString key = it.key();
QMap<QString, QString> value = it.value();
stream.writeStartElement(key);
for (auto it2 = value.begin(); it2!= value.end(); it2++) {
stream.writeTextElement(it2.key(), it2.value());
}
stream.writeEndElement();
}
stream.writeEndElement();
stream.writeEndDocument();
file.close();
return true;
}