00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef NANOXML_H
00023 #define NANOXML_H
00024
00025 #include <QVariant>
00026 #include <QStringList>
00027 #include <QObject>
00028 #include <QXmlDefaultHandler>
00029 #include <QStack>
00030
00031 class NanoXml : public QObject, QXmlDefaultHandler
00032 {
00033 Q_OBJECT
00034
00035 public:
00036 NanoXml(const QString& path);
00037 ~NanoXml();
00038 const QVariant& root();
00039 const QString namespaceUri();
00040 bool didFail();
00041
00042 QVariant keySub(const QString &key);
00043 QVariant keyValue(const QString &key);
00044 QVariant keyValue(const QString &key1, const QString &key2);
00045 QVariant keyValue(const QString &key1, const QString &key2, const QString &key3);
00046 QVariant keyValue(const QString &key1, const QString &key2, const QString &key3,
00047 const QString &key4);
00048 QVariant keyValue(const QString &key1, const QString &key2, const QString &key3,
00049 const QString &key4, const QString &key5);
00050 QVariantList keyValues(const QString &key);
00051
00052 static QVariant keySub(const QString &key, const QVariant &dom);
00053 static QVariant keyValue(const QString &key, const QVariant &dom);
00054 static QVariant keyValue(const QString &key1, const QString &key2, const QVariant &dom);
00055 static QVariant keyValue(const QString &key1, const QString &key2, const QString &key3,
00056 const QVariant &dom);
00057 static QVariant keyValue(const QString &key1, const QString &key2, const QString &key3,
00058 const QString &key4, const QVariant &dom);
00059 static QVariant keyValue(const QString &key1, const QString &key2, const QString &key3,
00060 const QString &key4, const QString &key5, const QVariant &dom);
00061 static QVariantList keyValues(const QString &key, const QVariant &dom);
00062
00063 static QString dumpTree(const QVariant &tree, int level);
00064
00065 private:
00066 QList<QVariant> *current;
00067 QStack<QList <QVariant>* > stack;
00068 QVariant rootVariant;
00069 bool failed;
00070 QString nspace;
00071
00072 void pushList();
00073 void addValue(const QString& v);
00074 void popList();
00075
00076 public:
00077 bool startElement(const QString&, const QString&, const QString &name, const QXmlAttributes &attrs);
00078 bool endElement(const QString&, const QString&, const QString &name);
00079 bool startPrefixMapping(const QString &prefix, const QString &uri);
00080 bool characters(const QString &chars);
00081 };
00082
00083 #endif // NANOXML_H