DomainPlug-insDocumentation
|
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 00020 inline Str encodeXmlSafe( const Str& src ){ 00021 return encodeXmlSafe(src.c_str()); 00022 } 00023 00033 struct XMLSIMPLE_DECL NS { 00034 const Str prefix; 00035 const Str href; 00036 bool operator==(const NS& s) const { return href == s.href && prefix==s.prefix; } 00037 bool operator!=(const NS& s) const { return !operator==(s); } 00038 NS() {;} 00039 NS(const Str& pref, const Str& hr); 00040 }; 00041 00042 const NS NSXSI = NS("xsi","http://www.w3.org/2001/XMLSchema-instance"); 00043 const NS NSNULL = NS(); 00044 00050 class XMLSIMPLE_DECL XMLPacket { 00051 public: 00052 00060 XMLPacket(const char * version, const char * rootnode, const NS& ns); 00061 00068 XMLPacket(const char * version, const char * rootnode); 00069 XMLPacket(const std::string& xmlPacket); 00070 XMLPacket(const Str& xmlPacket); 00071 XMLPacket(void); 00072 00073 00080 void Clean(const char* version, const char* rootnode); 00081 00082 virtual ~XMLPacket(); 00083 00089 void setEncoding(const char * encoding); 00090 00095 Str getEncoding(); 00096 00103 void addChild (const char* basepath, const char* nodename); 00104 inline void addChild (const Str& basepath, const char* nodename){ 00105 addChild(basepath.c_str(),nodename); 00106 } 00107 inline void addChild (const Str& basepath, const Str& nodename){ 00108 addChild(basepath.c_str(),nodename.c_str()); 00109 } 00110 00118 void addChild (const char* basepath, const char* nodename, const char* nodeval); 00119 inline void addChild (const char* basepath, const char* nodename, const Str& nodeval) { 00120 addChild(basepath,nodename,nodeval.c_str()); 00121 } 00122 inline void addChild (const Str& basepath, const char* nodename, const Str& nodeval) { 00123 addChild(basepath.c_str(),nodename,nodeval.c_str()); 00124 } 00125 inline void addChild (const Str& basepath, const Str& nodename, const Str& nodeval) { 00126 addChild(basepath.c_str(),nodename.c_str(),nodeval.c_str()); 00127 } 00128 00136 void constructTreeWithValue (const char* basepath, const char* treepath, const char* nodevalue); 00137 00144 void constructTree (const char* basepath, const char* treepath); 00145 00152 void setElement (const char* basepath, const char* nodevalue); 00153 inline void setElement (const char* basepath, const Str& nodevalue){ 00154 setElement(basepath,nodevalue.c_str()); 00155 } 00156 00164 void setProp (const char* basepath, const char* name, const char* value); 00165 inline void setProp (const char* basepath, const char* name, const Str& value) { 00166 setProp(basepath,name,value.c_str()); 00167 } 00168 00174 Str getProp (const char* basepath, const char* name); 00175 00182 void setNS (const char* basepath, NS ns); 00183 // ^^ Ask me you need in 00184 00191 bool executeXPathBool(const Str& expr) const; 00192 00199 Str executeXPathStr(const Str& expr) const; 00200 00207 Double executeXPathDouble(const Str& expr) const; 00208 00215 Int executeXPathInt(const Str& expr) const; 00216 00223 list<Str> executeXPathListStr(const Str& expr) const; 00224 00231 list< pair<Str, Str> > executeXPathPairListStr(const Str& expr) const; 00232 00238 const std::string generateXML() const; 00239 00245 const list<NS> getNSset() const { return NSSet; }; 00246 00252 void addNS(NS x) { NSSet.push_back(x); }; 00253 00260 void registerNSInXML(const NS& ns, xmlNodePtr node=0); 00261 00268 void registerNSInXML(const NS& ns, const char * path); 00269 00274 list<NS> findNsInXML(void) const; 00275 00280 const Str getHrefByPrefix(const Str prefix) const; 00281 00288 xmlNsPtr findNsByHref(const Str href,const xmlNodePtr node) const; 00289 00297 xmlNsPtr findAndRegisterNSInXML(const Str& prefix, xmlNodePtr curnode); 00298 00306 xmlNsPtr findNsByPrefixInXML(const Str& prefix,const xmlNodePtr node=0) const; 00307 00308 // COPY 00309 XMLPacket &operator= (const XMLPacket&); 00310 00311 xmlNodePtr xmlPacketPtr; 00312 private: 00313 list<NS> NSSet; 00314 00315 xmlXPathObjectPtr executeXPath(const char* expr) const; 00316 xmlXPathObjectPtr executeXPath(const Str& expr) const { 00317 return executeXPath(expr.c_str()); 00318 } 00319 }; 00320 00321 #endif