Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "xmldatascraper.h"
- #include <QVariantMap>
- #include <QVariant>
- #include <QDebug>
- XMLDataScraper::XMLDataScraper(const QString& fileToAnalyze) : DataScraper(fileToAnalyze)
- {
- }
- QVariantMap XMLDataScraper::GetVariantMap() {
- QXmlStreamReader reader(this->ReadFile(this->GetFileToAnalyze()));
- return this->xmlStreamToVariant(reader);
- }
- QVariantMap XMLDataScraper::xmlStreamToVariant(QXmlStreamReader &xml, const QString &prefix, const int maxDepth)
- {
- if (maxDepth < 0) {
- qWarning("max depth exceeded");
- return QVariantMap();
- }
- if (xml.hasError()) {
- qWarning(xml.errorString().toStdString().c_str());
- return QVariantMap();
- }
- if (xml.tokenType() == QXmlStreamReader::NoToken)
- xml.readNext();
- if ((xml.tokenType() != QXmlStreamReader::StartDocument) &&
- (xml.tokenType() != QXmlStreamReader::StartElement)) {
- qWarning("That's weird.");
- return QVariantMap();
- }
- QVariantMap map;
- /*if (xml.tokenType() == QXmlStreamReader::StartDocument) {
- map.insert(prefix + QLatin1String("DocumentEncoding"), xml.documentEncoding().toString());
- map.insert(prefix + QLatin1String("DocumentVersion"), xml.documentVersion().toString());
- map.insert(prefix + QLatin1String("StandaloneDocument"), xml.isStandaloneDocument());
- } else {
- if (!xml.namespaceUri().isEmpty())
- map.insert(prefix + QLatin1String("NamespaceUri"), xml.namespaceUri().toString());
- foreach (const QXmlStreamAttribute &attribute, xml.attributes()) {
- QVariantMap attributeMap;
- attributeMap.insert(QLatin1String("Value"), attribute.value().toString());
- if (!attribute.namespaceUri().isEmpty())
- attributeMap.insert(QLatin1String("NamespaceUri"), attribute.namespaceUri().toString());
- if (!attribute.prefix().isEmpty())
- attributeMap.insert(QLatin1String("Prefix"), attribute.prefix().toString());
- attributeMap.insert(QLatin1String("QualifiedName"), attribute.qualifiedName().toString());
- map.insertMulti(prefix + attribute.name().toString(), attributeMap);
- }
- }*/
- for (xml.readNext(); (!xml.atEnd()) && (xml.tokenType() != QXmlStreamReader::EndElement)
- && (xml.tokenType() != QXmlStreamReader::EndDocument); xml.readNext()) {
- switch (xml.tokenType()) {
- case QXmlStreamReader::Characters:
- case QXmlStreamReader::Comment:
- case QXmlStreamReader::DTD:
- case QXmlStreamReader::EntityReference:
- //qWarning(xml.tokenString().toStdString().c_str());
- //map.insertMulti(prefix + xml.tokenString(), xml.text().toString());
- break;
- case QXmlStreamReader::ProcessingInstruction:
- map.insertMulti(prefix + xml.processingInstructionTarget().toString(),
- xml.processingInstructionData().toString());
- break;
- case QXmlStreamReader::StartElement:
- //qWarning(xml.name().toString().toStdString().c_str());
- map.insertMulti(xml.name().toString(), xmlStreamToVariant(xml, prefix, maxDepth-1));
- break;
- default:
- qWarning("Unknown token type.");
- break;
- }
- }
- for(QVariantMap::const_iterator iter = map.begin(); iter != map.end(); ++iter) {
- qDebug() << iter.key() << iter.value();
- }
- return map;
- }
Advertisement
Add Comment
Please, Sign In to add comment