00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00035 #ifndef OW_XMLPULLPARSER_HPP_INCLUDE_GUARD_
00036 #define OW_XMLPULLPARSER_HPP_INCLUDE_GUARD_
00037 #include "OW_config.h"
00038 #include "OW_AutoPtr.hpp"
00039 #include "OW_TempFileStream.hpp"
00040 #include "OW_String.hpp"
00041 #include "OW_XMLParserCore.hpp"
00042
00043 #ifdef OW_HAVE_ISTREAM
00044 #include <istream>
00045 #else
00046 #include <iostream>
00047 #endif
00048
00049 namespace OW_NAMESPACE
00050 {
00051
00052 class OW_XML_API XMLPullParser
00053 {
00054 public:
00055 XMLPullParser(const String& str);
00056 XMLPullParser(std::istream& sb);
00057 XMLPullParser();
00058 virtual ~XMLPullParser();
00059
00060 String mustGetAttribute(const char* const attrName) const
00061 {
00062 return getAttribute(attrName, true);
00063 }
00064
00065 String getAttribute(const char* const attrName, bool throwIfError = false) const;
00066 void getChild();
00067 void mustGetChild();
00068 void getNextTag(bool throwIfError = false);
00069 void getNext(bool throwIfError = false);
00070 void mustGetNext()
00071 {
00072 getNext(true);
00073 }
00074 void mustGetNextTag()
00075 {
00076 getNextTag(true);
00077 }
00078 void mustGetEndTag();
00079 bool tokenIs(const char* const arg) const
00080 {
00081 return m_curTok.text.equals(arg);
00082 }
00083 String getName() const;
00084 String getData() const;
00085 bool isData() const;
00086 protected:
00087
00088 #ifdef OW_WIN32
00089 #pragma warning (push)
00090 #pragma warning (disable: 4251)
00091 #endif
00092
00093 AutoPtr<TempFileStream> m_ptfs;
00094
00095 #ifdef OW_WIN32
00096 #pragma warning (pop)
00097 #endif
00098
00099 XMLParserCore m_parser;
00100 XMLToken m_curTok;
00101 bool m_good;
00102
00103 void prime();
00104 void nextToken();
00105 void skipData();
00106
00107 private:
00108
00109 XMLPullParser(const XMLPullParser& x);
00110 XMLPullParser& operator=(const XMLPullParser& x);
00111
00112 friend OW_XML_API std::ostream& operator<<(std::ostream& ostr, const XMLPullParser& p);
00113 };
00114
00115 }
00116
00117 #endif