From feda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Fri, 27 Jul 2018 23:51:12 -0400 Subject: New upstream version 3.2.1+dfsg1 --- .../coreSQLiteStudio/common/xmldeserializer.cpp | 84 ++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 SQLiteStudio3/coreSQLiteStudio/common/xmldeserializer.cpp (limited to 'SQLiteStudio3/coreSQLiteStudio/common/xmldeserializer.cpp') diff --git a/SQLiteStudio3/coreSQLiteStudio/common/xmldeserializer.cpp b/SQLiteStudio3/coreSQLiteStudio/common/xmldeserializer.cpp new file mode 100644 index 0000000..7c86088 --- /dev/null +++ b/SQLiteStudio3/coreSQLiteStudio/common/xmldeserializer.cpp @@ -0,0 +1,84 @@ +/*#include "xmldeserializer.h" +#include "unused.h" +#include + +XmlDeserializer::XmlDeserializer() +{ +} + +QHash XmlDeserializer::deserialize(QIODevice *input) +{ + QXmlStreamReader reader(input); + return deserialize(reader); +} + +QHash XmlDeserializer::deserialize(const QString &input) +{ + QXmlStreamReader reader(input); + return deserialize(reader); +} + +QHash XmlDeserializer::deserialize(QXmlStreamReader &reader) +{ + ctxStack.clear(); + output.clear(); + ctx = &output; + + QXmlStreamReader::TokenType tokenType; + while ((tokenType = reader.readNext()) != QXmlStreamReader::EndDocument) + handleTokenType(reader, tokenType); + + return output; +} + +void XmlDeserializer::handleTokenType(QXmlStreamReader& reader, QXmlStreamReader::TokenType tokenType) +{ + switch (tokenType) + { + case QXmlStreamReader::Comment: + case QXmlStreamReader::EndDocument: + case QXmlStreamReader::DTD: + case QXmlStreamReader::NoToken: + case QXmlStreamReader::ProcessingInstruction: + case QXmlStreamReader::StartDocument: + case QXmlStreamReader::EntityReference: + break; + case QXmlStreamReader::Invalid: + qDebug() << "Invalid token while parsing XML:" << reader.errorString(); + break; + case QXmlStreamReader::StartElement: + handleStartElement(reader); + break; + case QXmlStreamReader::Characters: + handleText(reader); + break; + case QXmlStreamReader::EndElement: + handleEndElement(reader); + break; + } +} + +void XmlDeserializer::handleStartElement(QXmlStreamReader &reader) +{ + QString key = reader.name().toString(); + QHash newCtx; + ctx->insertMulti(key, newCtx); + + for (const QXmlStreamAttribute& attr : reader.attributes()) + ctx->insertMulti(attr.name().toString(), attr.value().toString()); + + ctxStack.push(ctx); + ctx = &((*ctx)[key]); +} + +void XmlDeserializer::handleText(QXmlStreamReader &reader) +{ + ctx->insertMulti(QString(), reader.text().toString()); +} + +void XmlDeserializer::handleEndElement(QXmlStreamReader &reader) +{ + UNUSED(reader); + ctx = ctxStack.pop(); +} +*/ -- cgit v1.2.3