wsdlpull  1.23
XmlDoc.h
Go to the documentation of this file.
1 /*
2  * wsdlpull - A C++ parser for WSDL (Web services description language)
3  * XmlNode_t and XmlDoc_t for the WsdlParser
4  * Copyright (C) 2009 Daniel Rodriguez
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the Free
18  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  */
20 
21 #ifndef __XMLDOC_HPP__
22 #define __XMLDOC_HPP__
23 
24 #include <ostream>
25 #include <vector>
26 #include <map>
27 #include <string>
28 
29 
30 
31 
32  class XmlNode_t {
33  public:
34  enum {
35  WS_AMOUNT = 2,
37  NON_EMPTY_NODE = 0
38  };
39 
40  protected:
41 
42  size_t m_depth;
43 
44  bool m_empty;
45 
46  std::string m_name;
47  std::string m_text;
48 
49  typedef std::vector< std::pair< std::string, std::string> > VectorAttributes_t;
50  typedef std::map< std::string, size_t> MapAttributes_t;
51 
54 
55  typedef std::vector< XmlNode_t *> VectorNodePtrs_t;
56  typedef std::multimap< std::string, size_t> MultiMapNodes_t;
57 
61 
64 
65 
66  public:
67  XmlNode_t( const std::string &p_name = "", size_t p_depth = 0);
68  XmlNode_t( const XmlNode_t &p_xmlNode);
69 
70  XmlNode_t &operator =( const XmlNode_t &p_xmlNode);
71 
72  virtual ~XmlNode_t();
73 
74  private:
75  void deallocateNodes( void);
76 
77  public:
78  void clear( void);
79 
80  XmlNode_t &getParent( void) const;
81  void setParent( XmlNode_t &p_parent);
82  void setParent( XmlNode_t *p_parent);
83 
84 
85  XmlNode_t &getPrev( void) const;
86  void setPrev( XmlNode_t &p_prev);
87  void setPrev( XmlNode_t *p_prev);
88 
89  XmlNode_t &getNext( void) const;
90  void setNext( XmlNode_t &p_next);
91  void setNext( XmlNode_t *p_next);
92 
93  const std::string &getName( void) const;
94  void setName( const std::string &p_name, bool p_empty = XmlNode_t::EMPTY_NODE);
95 
96  const std::string &getText( void) const;
97  void setText( const std::string &p_text);
98 
99  size_t getDepth( void) const;
100  void setDepth( size_t p_depth);
101 
102  bool isTextNode( void) const;
103  bool isRootNode( void) const;
104 
105  XmlNode_t &addNode( XmlNode_t *p_xmlNode = NULL);
106  XmlNode_t &addNode( const std::string &p_name, bool p_empty);
107 
108  void addAttribute( const std::string &p_name, const std::string &p_value);
109  bool getAttribute( const std::string &p_name, std::string &p_result) const;
110 
111  void setEmpty( bool p_empty);
112  bool empty( void) const;
113 
114  XmlNode_t *getNode( const std::string &p_name, size_t p_index = 0) const;
115 
116  void getAllChildren( XmlNode_t::VectorNodePtrs_t &p_children);
117  void findSelfOrChildren( const std::string &p_name, XmlNode_t::VectorNodePtrs_t &p_children, bool p_lazyRelativeMatch = false);
118  void findAny( const std::string &p_name, XmlNode_t::VectorNodePtrs_t &p_children);
119  void findDirectChildren( const std::string &p_name, XmlNode_t::VectorNodePtrs_t &p_children);
120 
121  bool operator ==( const XmlNode_t &p_xmlNode) const;
122 
123  friend std::ostream &operator <<( std::ostream &p_ostream, const XmlNode_t &p_xmlNode);
124 
125  };
126 
127  class XmlDoc_t {
128  protected:
129  //std::string m_version;
130  //std::string m_encoding;
131 
133 
136 
137  public:
138  XmlDoc_t( const XmlNode_t &p_xmlNode = XmlNode_t());
139 
140  void clear( void);
141 
142  void setProcessEnvAndBody( bool p_processEnvAndBody);
143  bool getProcessEnvAndBody( void) const;
144 
145  void setLazyRelativeMatch( bool p_lazyRelativeMatch);
146  bool getLazyRelativeMatch( void) const;
147 
148  XmlNode_t &setRootNode( const XmlNode_t &p_xmlNode);
149 
150  XmlNode_t &getRootNode( void);
151  const XmlNode_t &getRootNode( void) const;
152 
153  friend std::ostream &operator <<( std::ostream &p_ostream, const XmlDoc_t &p_xmlDoc);
154 
155  bool xpath( const std::string &p_xpath, std::vector< std::string> &p_results, size_t p_index = 0);
156 
157  };
158 
159 
160 #endif
XmlNode_t::getDepth
size_t getDepth(void) const
Definition: XmlDoc.cpp:190
XmlNode_t::operator=
XmlNode_t & operator=(const XmlNode_t &p_xmlNode)
Definition: XmlDoc.cpp:47
XmlNode_t::getAttribute
bool getAttribute(const std::string &p_name, std::string &p_result) const
Definition: XmlDoc.cpp:258
XmlNode_t::addAttribute
void addAttribute(const std::string &p_name, const std::string &p_value)
Definition: XmlDoc.cpp:250
XmlNode_t::m_nodes
VectorNodePtrs_t m_nodes
Definition: XmlDoc.h:62
XmlNode_t::operator==
bool operator==(const XmlNode_t &p_xmlNode) const
Definition: XmlDoc.cpp:365
XmlNode_t::m_mapAttributes
MapAttributes_t m_mapAttributes
Definition: XmlDoc.h:53
XmlNode_t::getName
const std::string & getName(void) const
Definition: XmlDoc.cpp:171
XmlNode_t::VectorAttributes_t
std::vector< std::pair< std::string, std::string > > VectorAttributes_t
Definition: XmlDoc.h:49
XmlNode_t::m_text
std::string m_text
Definition: XmlDoc.h:47
XmlNode_t::MapAttributes_t
std::map< std::string, size_t > MapAttributes_t
Definition: XmlDoc.h:50
XmlNode_t::setParent
void setParent(XmlNode_t &p_parent)
Definition: XmlDoc.cpp:123
XmlNode_t::setText
void setText(const std::string &p_text)
Definition: XmlDoc.cpp:269
XmlDoc_t::setProcessEnvAndBody
void setProcessEnvAndBody(bool p_processEnvAndBody)
Definition: XmlDoc.cpp:430
XmlDoc_t::xpath
bool xpath(const std::string &p_xpath, std::vector< std::string > &p_results, size_t p_index=0)
Definition: XmlDoc.cpp:473
XmlDoc_t::getProcessEnvAndBody
bool getProcessEnvAndBody(void) const
Definition: XmlDoc.cpp:436
XmlNode_t::m_attributes
VectorAttributes_t m_attributes
Definition: XmlDoc.h:52
XmlDoc_t::setRootNode
XmlNode_t & setRootNode(const XmlNode_t &p_xmlNode)
Definition: XmlDoc.cpp:454
XmlDoc_t::m_rootNode
XmlNode_t m_rootNode
Definition: XmlDoc.h:132
XmlNode_t::m_mapNodes
MultiMapNodes_t m_mapNodes
Definition: XmlDoc.h:63
XmlNode_t::findAny
void findAny(const std::string &p_name, XmlNode_t::VectorNodePtrs_t &p_children)
Definition: XmlDoc.cpp:352
XmlNode_t::setName
void setName(const std::string &p_name, bool p_empty=XmlNode_t::EMPTY_NODE)
Definition: XmlDoc.cpp:177
XmlNode_t::m_depth
size_t m_depth
Definition: XmlDoc.h:42
XmlNode_t::setNext
void setNext(XmlNode_t &p_next)
Definition: XmlDoc.cpp:159
XmlDoc_t::m_lazyRelativeMatch
bool m_lazyRelativeMatch
Definition: XmlDoc.h:135
XmlNode_t::getNode
XmlNode_t * getNode(const std::string &p_name, size_t p_index=0) const
Definition: XmlDoc.cpp:289
XmlNode_t::findSelfOrChildren
void findSelfOrChildren(const std::string &p_name, XmlNode_t::VectorNodePtrs_t &p_children, bool p_lazyRelativeMatch=false)
Definition: XmlDoc.cpp:333
XmlNode_t::m_empty
bool m_empty
Definition: XmlDoc.h:44
XmlNode_t::isTextNode
bool isTextNode(void) const
Definition: XmlDoc.cpp:208
XmlNode_t::m_name
std::string m_name
Definition: XmlDoc.h:46
XmlNode_t::VectorNodePtrs_t
std::vector< XmlNode_t * > VectorNodePtrs_t
Definition: XmlDoc.h:55
XmlDoc_t::getLazyRelativeMatch
bool getLazyRelativeMatch(void) const
Definition: XmlDoc.cpp:448
XmlNode_t::setDepth
void setDepth(size_t p_depth)
Definition: XmlDoc.cpp:196
XmlNode_t::XmlNode_t
XmlNode_t(const std::string &p_name="", size_t p_depth=0)
Definition: XmlDoc.cpp:29
XmlNode_t::mp_parent
XmlNode_t * mp_parent
Definition: XmlDoc.h:58
XmlNode_t::getPrev
XmlNode_t & getPrev(void) const
Definition: XmlDoc.cpp:135
XmlDoc_t::clear
void clear(void)
Definition: XmlDoc.cpp:422
XmlNode_t::getAllChildren
void getAllChildren(XmlNode_t::VectorNodePtrs_t &p_children)
Definition: XmlDoc.cpp:317
XmlNode_t::empty
bool empty(void) const
Definition: XmlDoc.cpp:283
XmlNode_t::getParent
XmlNode_t & getParent(void) const
Definition: XmlDoc.cpp:117
XmlNode_t::getText
const std::string & getText(void) const
Definition: XmlDoc.cpp:184
XmlNode_t::WS_AMOUNT
@ WS_AMOUNT
Definition: XmlDoc.h:35
XmlDoc_t
Definition: XmlDoc.h:127
XmlNode_t::addNode
XmlNode_t & addNode(XmlNode_t *p_xmlNode=NULL)
Definition: XmlDoc.cpp:222
XmlDoc_t::setLazyRelativeMatch
void setLazyRelativeMatch(bool p_lazyRelativeMatch)
Definition: XmlDoc.cpp:442
XmlNode_t::operator<<
friend std::ostream & operator<<(std::ostream &p_ostream, const XmlNode_t &p_xmlNode)
Definition: XmlDoc.cpp:371
XmlNode_t::mp_prev
XmlNode_t * mp_prev
Definition: XmlDoc.h:59
XmlNode_t::getNext
XmlNode_t & getNext(void) const
Definition: XmlDoc.cpp:153
XmlNode_t::~XmlNode_t
virtual ~XmlNode_t()
Definition: XmlDoc.cpp:82
XmlDoc_t::operator<<
friend std::ostream & operator<<(std::ostream &p_ostream, const XmlDoc_t &p_xmlDoc)
Definition: XmlDoc.cpp:670
XmlNode_t::setEmpty
void setEmpty(bool p_empty)
Definition: XmlDoc.cpp:277
XmlNode_t::findDirectChildren
void findDirectChildren(const std::string &p_name, XmlNode_t::VectorNodePtrs_t &p_children)
Definition: XmlDoc.cpp:323
XmlNode_t::MultiMapNodes_t
std::multimap< std::string, size_t > MultiMapNodes_t
Definition: XmlDoc.h:56
XmlDoc_t::XmlDoc_t
XmlDoc_t(const XmlNode_t &p_xmlNode=XmlNode_t())
Definition: XmlDoc.cpp:413
XmlNode_t::clear
void clear(void)
Definition: XmlDoc.cpp:96
XmlNode_t::isRootNode
bool isRootNode(void) const
Definition: XmlDoc.cpp:202
XmlNode_t::setPrev
void setPrev(XmlNode_t &p_prev)
Definition: XmlDoc.cpp:141
XmlNode_t::EMPTY_NODE
@ EMPTY_NODE
Definition: XmlDoc.h:36
XmlNode_t::NON_EMPTY_NODE
@ NON_EMPTY_NODE
Definition: XmlDoc.h:37
XmlNode_t::mp_next
XmlNode_t * mp_next
Definition: XmlDoc.h:60
XmlDoc_t::getRootNode
XmlNode_t & getRootNode(void)
Definition: XmlDoc.cpp:461
XmlNode_t
Definition: XmlDoc.h:32
XmlDoc_t::m_processEnvAndBody
bool m_processEnvAndBody
Definition: XmlDoc.h:134