DomainPlug-insDocumentation
/home/pkhodos/work/trunk/ToolLibs/XMLSimpleLib/xmlpacket.h
Go to the documentation of this file.
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
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines