00001 #ifndef _XMLPACKET_H_
00002 #define _XMLPACKET_H_
00003
00004 #include <libxml/parser.h>
00005 #include <libxml/xpath.h>
00006 #include <libxml/xmlmemory.h>
00007 #include <libxml/xpathInternals.h>
00008
00009 #include <vector>
00010 #include <list>
00011 #include <map>
00012
00013 #include <xmlsimpleconfig.h>
00014
00015 #include <Comm/atracer.h>
00016 #include <stlrt/atypes.h>
00017
00018 XMLSIMPLE_DECL Str encodeXmlSafe( const char* src );
00019
00029 struct XMLSIMPLE_DECL NS {
00030 const Str prefix;
00031 const Str href;
00032 bool operator==(const NS& s) const { return href == s.href && prefix==s.prefix; }
00033 bool operator!=(const NS& s) const { return !operator==(s); }
00034 NS() {;}
00035 NS(const Str& pref, const Str& hr);
00036 };
00037
00038 const NS NSXSI = NS("xsi","http://www.w3.org/2001/XMLSchema-instance");
00039 const NS NSNULL = NS();
00040
00046 class XMLSIMPLE_DECL XMLPacket {
00047 public:
00048
00056 XMLPacket(const char * version, const char * rootnode, const NS& ns);
00057
00064 XMLPacket(const char * version, const char * rootnode);
00065 XMLPacket(const std::string& xmlPacket);
00066 XMLPacket(const Str& xmlPacket);
00067 XMLPacket(void);
00068
00069
00076 void Clean(const char* version, const char* rootnode);
00077
00078 virtual ~XMLPacket();
00079
00085 void setEncoding(const char * encoding);
00086
00091 Str getEncoding();
00092
00099 void addChild (const char* basepath, const char* nodename);
00100
00108 void addChild (const char* basepath, const char* nodename, const char* nodeval);
00109
00117 void constructTreeWithValue (const char* basepath, const char* treepath, const char* nodevalue);
00118
00125 void constructTree (const char* basepath, const char* treepath);
00126
00133 void setElement (const char* basepath, const char* nodevalue);
00134
00142 void setProp (const char* basepath, const char* name, const char* value);
00143
00149 Str getProp (const char* basepath, const char* name);
00150
00157 void setNS (const char* basepath, NS ns);
00158
00159
00166 bool executeXPathBool(const Str& expr) const;
00167
00174 Str executeXPathStr(const Str& expr) const;
00175
00182 Double executeXPathDouble(const Str& expr) const;
00183
00190 Int executeXPathInt(const Str& expr) const;
00191
00198 list<Str> executeXPathListStr(const Str& expr) const;
00199
00206 list< pair<Str, Str> > executeXPathPairListStr(const Str& expr) const;
00207
00213 const std::string generateXML() const;
00214
00220 const list<NS> getNSset() const { return NSSet; };
00221
00227 void addNS(NS x) { NSSet.push_back(x); };
00228
00235 void registerNSInXML(const NS& ns, xmlNodePtr node=0);
00236
00243 void registerNSInXML(const NS& ns, const char * path);
00244
00249 list<NS> findNsInXML(void) const;
00250
00255 const Str getHrefByPrefix(const Str prefix) const;
00256
00263 xmlNsPtr findNsByHref(const Str href,const xmlNodePtr node) const;
00264
00272 xmlNsPtr findAndRegisterNSInXML(const Str& prefix, xmlNodePtr curnode);
00273
00281 xmlNsPtr findNsByPrefixInXML(const Str& prefix,const xmlNodePtr node=0) const;
00282
00283
00284 XMLPacket &operator= (const XMLPacket&);
00285
00286 xmlNodePtr xmlPacketPtr;
00287 private:
00288 list<NS> NSSet;
00289
00290 const xmlXPathObjectPtr executeXPath(const char* expr) const;
00291 };
00292
00293 #endif