XmlDoc.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __XMLDOC_HPP__
00022 #define __XMLDOC_HPP__
00023
00024 #include <ostream>
00025 #include <vector>
00026 #include <map>
00027 #include <string>
00028
00029
00030
00031
00032 class XmlNode_t {
00033 public:
00034 enum {
00035 WS_AMOUNT = 2,
00036 EMPTY_NODE = 1,
00037 NON_EMPTY_NODE = 0
00038 };
00039
00040 protected:
00041
00042 size_t m_depth;
00043
00044 bool m_empty;
00045
00046 std::string m_name;
00047 std::string m_text;
00048
00049 typedef std::vector< std::pair< std::string, std::string> > VectorAttributes_t;
00050 typedef std::map< std::string, size_t> MapAttributes_t;
00051
00052 VectorAttributes_t m_attributes;
00053 MapAttributes_t m_mapAttributes;
00054
00055 typedef std::vector< XmlNode_t *> VectorNodePtrs_t;
00056 typedef std::multimap< std::string, size_t> MultiMapNodes_t;
00057
00058 XmlNode_t *mp_parent;
00059 XmlNode_t *mp_prev;
00060 XmlNode_t *mp_next;
00061
00062 VectorNodePtrs_t m_nodes;
00063 MultiMapNodes_t m_mapNodes;
00064
00065
00066 public:
00067 XmlNode_t( const std::string &p_name = "", size_t p_depth = 0);
00068 XmlNode_t( const XmlNode_t &p_xmlNode);
00069
00070 XmlNode_t &operator =( const XmlNode_t &p_xmlNode);
00071
00072 virtual ~XmlNode_t();
00073
00074 private:
00075 void deallocateNodes( void);
00076
00077 public:
00078 void clear( void);
00079
00080 XmlNode_t &getParent( void) const;
00081 void setParent( XmlNode_t &p_parent);
00082 void setParent( XmlNode_t *p_parent);
00083
00084
00085 XmlNode_t &getPrev( void) const;
00086 void setPrev( XmlNode_t &p_prev);
00087 void setPrev( XmlNode_t *p_prev);
00088
00089 XmlNode_t &getNext( void) const;
00090 void setNext( XmlNode_t &p_next);
00091 void setNext( XmlNode_t *p_next);
00092
00093 const std::string &getName( void) const;
00094 void setName( const std::string &p_name, bool p_empty = XmlNode_t::EMPTY_NODE);
00095
00096 const std::string &getText( void) const;
00097 void setText( const std::string &p_text);
00098
00099 size_t getDepth( void) const;
00100 void setDepth( size_t p_depth);
00101
00102 bool isTextNode( void) const;
00103 bool isRootNode( void) const;
00104
00105 XmlNode_t &addNode( XmlNode_t *p_xmlNode = NULL);
00106 XmlNode_t &addNode( const std::string &p_name, bool p_empty);
00107
00108 void addAttribute( const std::string &p_name, const std::string &p_value);
00109 bool getAttribute( const std::string &p_name, std::string &p_result) const;
00110
00111 void setEmpty( bool p_empty);
00112 bool empty( void) const;
00113
00114 XmlNode_t *getNode( const std::string &p_name, size_t p_index = 0) const;
00115
00116 void getAllChildren( XmlNode_t::VectorNodePtrs_t &p_children);
00117 void findSelfOrChildren( const std::string &p_name, XmlNode_t::VectorNodePtrs_t &p_children, bool p_lazyRelativeMatch = false);
00118 void findAny( const std::string &p_name, XmlNode_t::VectorNodePtrs_t &p_children);
00119 void findDirectChildren( const std::string &p_name, XmlNode_t::VectorNodePtrs_t &p_children);
00120
00121 bool operator ==( const XmlNode_t &p_xmlNode) const;
00122
00123 friend std::ostream &operator <<( std::ostream &p_ostream, const XmlNode_t &p_xmlNode);
00124
00125 };
00126
00127 class XmlDoc_t {
00128 protected:
00129
00130
00131
00132 XmlNode_t m_rootNode;
00133
00134 bool m_processEnvAndBody;
00135 bool m_lazyRelativeMatch;
00136
00137 public:
00138 XmlDoc_t( const XmlNode_t &p_xmlNode = XmlNode_t());
00139
00140 void clear( void);
00141
00142 void setProcessEnvAndBody( bool p_processEnvAndBody);
00143 bool getProcessEnvAndBody( void) const;
00144
00145 void setLazyRelativeMatch( bool p_lazyRelativeMatch);
00146 bool getLazyRelativeMatch( void) const;
00147
00148 XmlNode_t &setRootNode( const XmlNode_t &p_xmlNode);
00149
00150 XmlNode_t &getRootNode( void);
00151 const XmlNode_t &getRootNode( void) const;
00152
00153 friend std::ostream &operator <<( std::ostream &p_ostream, const XmlDoc_t &p_xmlDoc);
00154
00155 bool xpath( const std::string &p_xpath, std::vector< std::string> &p_results, size_t p_index = 0);
00156
00157 };
00158
00159
00160 #endif