blob: 53fa4f666ba93c876890ce618bb9c947c8aaf1f1 (
plain)
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
|
/****************************************************************************
XMLElement class
Representation of an XML element with methods for getting/setting
attributes and generating "opening" and "closing" tags.
-------------------
Copyright:
(C) 2004 by Paul Giannaros <ceruleanblaze@gmail.com>
-------------------
Original author: Paul Giannaros <ceruleanblaze@gmail.com>
******************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; version 2 of the License. *
* *
***************************************************************************/
#include "xmlelement.h"
#include <qstringlist.h>
#include <iostream>
/// Constructors
XMLElement::XMLElement() {
m_name = "";
m_attrmapper = AttributeToValueMap();
}
XMLElement::XMLElement(const QString &name) {
m_name = name;
m_attrmapper = AttributeToValueMap();
}
/// Destructor
XMLElement::~XMLElement() {
return;
}
/// Copy constructor
XMLElement::XMLElement(const XMLElement &element) {
m_attrmapper = element.m_attrmapper;
m_name = element.m_name;
}
/// Assignement operator
XMLElement XMLElement::operator=(const XMLElement &element) {
m_attrmapper = element.m_attrmapper;
m_name = element.m_name;
return *this;
}
QString XMLElement::name() {
return m_name;
}
QString XMLElement::startTag() {
QString output = "<" + m_name + " ";
for(AttributeToValueMap::Iterator it = m_attrmapper.begin(); it != m_attrmapper.end(); ++it) {
output.append(it.key() + "=\"" + it.data() + "\" ");
}
output = output.left(output.length() - 1);
// Get rid of the space at the end and then append a '>'
output.append(">");
return output;
}
QString XMLElement::endTag() {
return "</" + m_name + ">";
}
void XMLElement::setAttribute(const QString &attr, const QString &value) {
m_attrmapper[attr] = value;
}
QString XMLElement::attribute(const QString &attr) {
return m_attrmapper[attr];
}
QString XMLElement::toQString() {
QString tag = startTag();
return tag.left(tag.length() - 1).right(tag.length() - 2);
}
XMLElement XMLElement::fromQString(const QString &str) {
QStringList sections = QStringList::split(" ", str);
QString tagname = sections[0];
XMLElement e(tagname.latin1());
sections.pop_front();
// Loop over the remaining strings which are attributes="values"
if(sections.count()) {
const int sectionsCount = sections.count();
for(int i = 0; i < sectionsCount; ++i) {
QStringList list = QStringList::split("=", sections[i]);
if(list.count() != 2) {
std::cerr << "XMLElement::fromQString: Cannot convert list: " << list.join("|") << ". `" << str << "' is not in valid format.\n";
return XMLElement(" ");
}
e.setAttribute(list[0], list[1].left(list[1].length() - 1).right(list[1].length() -2));
}
}
return e;
}
|