Pouknouki

Untitled

Sep 30th, 2016
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.45 KB | None | 0 0
  1. #include "xmldatascraper.h"
  2.  
  3.  
  4. #include <QVariantMap>
  5. #include <QVariant>
  6. #include <QDebug>
  7.  
  8. XMLDataScraper::XMLDataScraper(const QString& fileToAnalyze) : DataScraper(fileToAnalyze)
  9. {
  10.  
  11. }
  12.  
  13. QVariantMap XMLDataScraper::GetVariantMap() {
  14. QXmlStreamReader reader(this->ReadFile(this->GetFileToAnalyze()));
  15. return this->xmlStreamToVariant(reader);
  16. }
  17.  
  18. QVariantMap XMLDataScraper::xmlStreamToVariant(QXmlStreamReader &xml, const QString &prefix, const int maxDepth)
  19. {
  20. if (maxDepth < 0) {
  21. qWarning("max depth exceeded");
  22. return QVariantMap();
  23. }
  24.  
  25. if (xml.hasError()) {
  26. qWarning(xml.errorString().toStdString().c_str());
  27. return QVariantMap();
  28. }
  29.  
  30. if (xml.tokenType() == QXmlStreamReader::NoToken)
  31. xml.readNext();
  32.  
  33. if ((xml.tokenType() != QXmlStreamReader::StartDocument) &&
  34. (xml.tokenType() != QXmlStreamReader::StartElement)) {
  35. qWarning("That's weird.");
  36. return QVariantMap();
  37. }
  38.  
  39. QVariantMap map;
  40. /*if (xml.tokenType() == QXmlStreamReader::StartDocument) {
  41. map.insert(prefix + QLatin1String("DocumentEncoding"), xml.documentEncoding().toString());
  42. map.insert(prefix + QLatin1String("DocumentVersion"), xml.documentVersion().toString());
  43. map.insert(prefix + QLatin1String("StandaloneDocument"), xml.isStandaloneDocument());
  44. } else {
  45. if (!xml.namespaceUri().isEmpty())
  46. map.insert(prefix + QLatin1String("NamespaceUri"), xml.namespaceUri().toString());
  47. foreach (const QXmlStreamAttribute &attribute, xml.attributes()) {
  48. QVariantMap attributeMap;
  49. attributeMap.insert(QLatin1String("Value"), attribute.value().toString());
  50. if (!attribute.namespaceUri().isEmpty())
  51. attributeMap.insert(QLatin1String("NamespaceUri"), attribute.namespaceUri().toString());
  52. if (!attribute.prefix().isEmpty())
  53. attributeMap.insert(QLatin1String("Prefix"), attribute.prefix().toString());
  54. attributeMap.insert(QLatin1String("QualifiedName"), attribute.qualifiedName().toString());
  55. map.insertMulti(prefix + attribute.name().toString(), attributeMap);
  56. }
  57. }*/
  58.  
  59. for (xml.readNext(); (!xml.atEnd()) && (xml.tokenType() != QXmlStreamReader::EndElement)
  60. && (xml.tokenType() != QXmlStreamReader::EndDocument); xml.readNext()) {
  61. switch (xml.tokenType()) {
  62. case QXmlStreamReader::Characters:
  63. case QXmlStreamReader::Comment:
  64. case QXmlStreamReader::DTD:
  65. case QXmlStreamReader::EntityReference:
  66. //qWarning(xml.tokenString().toStdString().c_str());
  67. //map.insertMulti(prefix + xml.tokenString(), xml.text().toString());
  68. break;
  69. case QXmlStreamReader::ProcessingInstruction:
  70. map.insertMulti(prefix + xml.processingInstructionTarget().toString(),
  71. xml.processingInstructionData().toString());
  72. break;
  73. case QXmlStreamReader::StartElement:
  74. //qWarning(xml.name().toString().toStdString().c_str());
  75. map.insertMulti(xml.name().toString(), xmlStreamToVariant(xml, prefix, maxDepth-1));
  76. break;
  77. default:
  78. qWarning("Unknown token type.");
  79. break;
  80. }
  81. }
  82. for(QVariantMap::const_iterator iter = map.begin(); iter != map.end(); ++iter) {
  83. qDebug() << iter.key() << iter.value();
  84. }
  85. return map;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment